То, что Вы делаете, отображает ряд точек ввода на ряд выходных точек. Первая часть проблемы должна определить отображение для Вашего изменения размеров или вращения; вторая часть должна обработать точки, которые не лежат точно на границе пикселей.
Отображение для изменения размеры легко:
x' = x * (width' / width)
y' = y * (height' / height)
Отображение для вращения только немного более трудно.
x' = x * cos(a) + y * sin(a)
y' = y * cos(a) - x * sin(a)
техника для определения значения пикселей, которые перестают работать, сетку называют интерполяцией. Существует много таких алгоритмов, располагаясь широко в скорости и заключительном качестве изображения. Несколько из них в увеличивающемся порядке качества/времени являются самым близким соседом, билинейным, bicubic, и фильтр Sinc.
Хорошо, я только что изменил клиента, поэтому он использует файл конфигурации вместо кода, и я получаю ту же ошибку!
Код:
ServiceReference1.Service1Client client = new WCFTest.ConsoleClient.ServiceReference1.Service1Client("NetTcpBinding_IService1");
client.PrintMessage("Hello!");
Вот файл конфигурации клиента, только что созданный из Служба ... что заставляет меня думать, что это может быть ошибка несоответствия контракта
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
<wsHttpBinding>
<binding name="WSHttpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://servername:9999/TestService1/" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
name="WSHttpBinding_IService1">
<identity>
<dns value="
 " />
</identity>
</endpoint>
<endpoint address="net.tcp://serverName:9990/TestService1/" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_IService1" contract="ServiceReference1.IService1"
name="NetTcpBinding_IService1">
<identity>
<userPrincipalName value="MyUserPrincipalName " />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
Другие возможные причины:
[IgnoreDataMember]
к полю или свойству.Что проверить:
Настроить трассировку WCF на наличие, по крайней мере, критических ошибок или исключений. Будьте внимательны при просмотре файлов, если вы включите дополнительные трассировки. Во многих случаях это даст очень полезную информацию.
Просто добавьте это в
в ваш web.config
ON THE SERVER. Создайте каталог log
, если он не существует.
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Error, Critical"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\WCF_Errors.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
ExceptionDetail, скорее всего созданный IncludeExceptionDetailInFaults=true, чья ценность: System.InvalidOperationException: Исключение было брошено при вызове на Расширение экспорта WSDL: Система.СервисМодель.Описание.DataContractSerializerOperationBehavior контракт: http://tempuri.org/:IOrderPipelineService. ----> System.Runtime.Serialization.InvalidDataContractException: Тип Р.МВЦ Услуги.ТрубопроводыСтройплощадка". не может быть сериализован. Рассмотрим возможность маркировки. с помощью DataContractAttribute атрибут, и маркировка всех его члены, которых вы хотите сериализовать с Атрибут DataMemberAttribute.
Для меня это сообщение об ошибке было выдано, потому что мое поведение службы web.config по умолчанию имеет низкий предел количества сообщений, поэтому, когда возвращается WCF, скажем, 200000 байт и мой лимит составлял 64000 байт, ответ был усечен, и вы получили «... бессмысленный ответ». Это значимо, оно просто усечено и не может быть проанализировано.
Я вставлю свое изменение web.config, которое устранило проблему:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="YourNameSpace.DataServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceTimeouts transactionTimeout="05:05:00" />
<serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500"
maxConcurrentInstances="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
Значение maxItemsInObjectGraph является наиболее важным!
Надеюсь, это кому-нибудь поможет.