クライアント Silverlight アプリから WCF サービスを呼び出すと、ProtocolException が発生することがあります。
コンテンツ タイプ text/html。応答メッセージの charset=UTF-8 がバインディングのコンテンツ タイプ (text/xml; charset=utf-8) と一致しません。
通常は、WCF サービス コードにステップ インして、オブジェクトを構築し、シリアル化された形式で返すことを確認できます。
ただし、要求が ~4MB を超えると (Fiddler2 で報告されているように)、WCF サービス コードのブレークポイントはヒットせず、応答の内容 (シリアル化されたオブジェクトがあるはずの場所) は、表示される標準の HTML ページの HTML になります。サービスを参照した場合 - 次のようなサービス:
リクエスト オブジェクト グラフ内の文字列にランダムに文字を追加したり、グラフからチャンクを削除したりすることで、リクエストを失敗または成功させることができるので、これがリクエストのサイズであると確信しています。
応答に HTML が含まれている理由を誰かが説明できれば本当に感謝しています。また、修正方法を教えていただければさらに感謝します。
私はVS2010を使用しています。私のサーバー側の設定は次のとおりです。
<httpRuntime executionTimeout="10800"
maxRequestLength="10240" />
...
<system.web>
<httpRuntime maxRequestLength="2147483647" />
</system.web>
...
<serviceBehaviors>
<behavior name="StandardServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
...
<binding name="BasicHttpBinding_SilverlightService"
useDefaultWebProxy="false"
transferMode="Streamed"
bypassProxyOnLocal="true"
receiveTimeout="00:20:00"
sendTimeout="00:20:00"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647">
<readerQuotas maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxDepth="2147483647"
maxNameTableCharCount="2147483647"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="None"/>
</security>
</binding>
そして私が持っているクライアント側:
<binding name="BasicHttpBinding_SilverlightService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
アップデート
この投稿で提案されているように、バインディングタグから名前を削除しようとしました。