Я использую привязку pollingDuplex для связи между моим веб-приложением Silverlight и моим веб-сервисом WCF.До сих пор он работал нормально, пока я не попытался отправить большие объемы данных из веб-приложения в веб-службу в виде xmlString.Затем я получил сообщение об ошибке:
"Программа форматирования вызвала исключение при попытке десериализации сообщения: Ошибка в теле десериализации сообщения запроса для операции 'SendUserSelection'. Максимальная длина содержимого строкиквота (8192) была превышена при чтении данных XML. Эту квоту можно увеличить, изменив свойство MaxStringContentLength объекта XmlDictionaryReaderQuotas, используемого при создании средства чтения XML. "
Я обнаружил, что вЧтобы увеличить свойство MaxStringContentLength, мне нужно преобразовать привязку pollingDuplex в настраиваемую привязку (http://blogs.msdn.com/b/silverlightws/archive/2010/04/04/some-known-wcf-issues-in-silverlight-4.aspx). Мой вопрос: как мне это сделать?
Моя привязка pollingDuplex определена в файле web.config файлавеб-служба выглядит следующим образом:
<pollingDuplex>
<binding name="myPollingDuplex" closeTimeout="00:10:00" openTimeout="00:10:00"
receiveTimeout="00:10:00" sendTimeout="00:10:00" duplexMode="MultipleMessagesPerPoll" />
Конечная точка:
<endpoint address="" binding="pollingDuplex" bindingConfiguration="myPollingDuplex" contract="WebApplication.Web.MainWS"/>
Код на стороне веб-приложения для создания экземпляра клиента веб-службы:
this.client = new MainWSRef.MainWSClient(new PollingDuplexHttpBinding { DuplexMode = PollingDuplexMode.MultipleMessagesPerPoll },
new EndpointAddress("http://localhost:1981/MainWS.svc"));
Я попробовал следующее:
<customBinding>
<binding name="myPollingDuplex" closeTimeout="00:10:00" openTimeout="00:10:00"
receiveTimeout="00:10:00" sendTimeout="00:10:00">
<pollingDuplex duplexMode="MultipleMessagesPerPoll">
</pollingDuplex>
<textMessageEncoding>
<readerQuotas maxDepth="32" maxStringContentLength="5242880"
maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</customBinding>
Конечная точка:
<endpoint address="" binding="customBinding" bindingConfiguration="myPollingDuplex" contract="WebApplication.Web.MainWS"/>
Код на стороне веб-приложения:
CustomBinding binding = new CustomBinding(new PollingDuplexBindingElement(), new BinaryMessageEncodingBindingElement(), new HttpTransportBindingElement());
this.client = new MainWSRef.MainWSClient(binding, new EndpointAddress("http://localhost:1981/MainWS.svc"));
Когда я пытаюсь запустить код, я получаю следующее сообщение об ошибке:
"Theудаленный сервер возвратил ошибку: NotFound. "
Я что-то не так делаю?Буду признателен за любые предложения.