SilverlightWebアプリケーションとWCFWebサービス間の通信にpollingDuplexバインディングを使用しています。これまでは、xmlStringの形式でWebアプリケーションからWebサービスに大量のデータを送信しようとするまでは正常に機能していました。次に、エラーメッセージが表示されました。
「フォーマッタがメッセージの逆シリアル化中に例外をスローしました:操作'SendUserSelection'の要求メッセージの本文の逆シリアル化中にエラーが発生しました。XMLデータの読み取り中に最大文字列コンテンツ長のクォータ(8192)を超えました。このクォータは変更することで増加する可能性がありますXMLリーダーの作成時に使用されるXmlDictionaryReaderQuotasオブジェクトのMaxStringContentLengthプロパティ。」
MaxStringContentLengthプロパティを増やすには、pollingDuplexバインディングをカスタムバインディングに変換する必要があることがわかりました(http://blogs.msdn.com/b/silverlightws/archive/2010/04/04/some-known-wcf- issues-in-silverlight-4.aspx)。私の質問はどうすればそれができるのかということです。
Webサービスのweb.configファイルで定義されているpolingDuplexバインディングは、次のようになります。
<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"/>
Webサービスクライアントをインスタンス化するためのWebアプリケーション側のコード:
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"/>
Webアプリケーション側のコード:
CustomBinding binding = new CustomBinding(new PollingDuplexBindingElement(), new BinaryMessageEncodingBindingElement(), new HttpTransportBindingElement());
this.client = new MainWSRef.MainWSClient(binding, new EndpointAddress("http://localhost:1981/MainWS.svc"));
コードを実行しようとすると、次のエラーメッセージが表示されます。
「リモートサーバーがエラーを返しました:NotFound。」
私は何か間違ったことをしていますか?何か提案をいただければ幸いです。