2

基本的なクエリで動作する WCF サービスがあります。すぐに使用できるデフォルトのバインディング (デフォルト値を持つ WSHttpBinding) から始めました。

データ コントラクトはカスタム オブジェクトの配列用で、各オブジェクトのサイズは約 6k になります。これらのうち最大 5 つを (1 回のトランザクションで) 送信すると、正常に動作します。6 つ以上送信しようとすると、次のエラーが表示されます。

「リモート サーバーがエラーを返しました: (400) 不正な要求です。」

私はいくつかのバインディングを調査し、次のようにクライアントで構成を設定しようとしました:

<binding name="WSHttpBinding_IASRService" closeTimeout="00:10:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
         bypassProxyOnLocal="false" transactionFlow="false" 
         hostNameComparisonMode="StrongWildcard"
         maxBufferPoolSize="50000000" maxReceivedMessageSize="50000000"
         messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
         allowCookies="false">
   <readerQuotas maxDepth="50000000" maxStringContentLength="50000000" 
                 maxArrayLength="50000000" maxBytesPerRead="50000000" 
                 maxNameTableCharCount="50000000" />
   <reliableSession ordered="true" inactivityTimeout="00:10:00"
                enabled="false" />
</binding>

同様に、サービスの web.config ファイルに構成を設定しましたが、問題は解決しません。

また、クライアントの app.config を messageEncoding="Mtom" に設定しようとしましたが、クライアントとサーバーの間でバインディングが一致していない可能性があるという別のバインディング エラーが発生したので、とりあえずそれを取り出しました。(Mtom はサーバーの web.config でも指定されていましたが。) また、私の調査では、各バインド プロパティの明確で単純な説明はまだ見つかりませんでした。

要約すると、次の質問に答えようとしています。

  1. より大きなリクエストを取得して不正なリクエスト エラーを生成しないようにする方法
  2. エラーを生成せずにクライアントを Mtom に設定する方法
  3. 各バインディング プロパティとその使用方法に関する適切な基本リファレンスはありますか?
4

3 に答える 3

2

これが私があなたの#2のために難しい方法を学んだヒントです:

サーバー側でWCFに変更を加えるたびに、サーバープロジェクトを再コンパイルしてから、クライアント側で[参照の更新]を実行します(サービス参照を右クリックします)。

于 2009-06-11T18:48:55.567 に答える
1

デバッグを開始するための最善の策は、運用上のアプローチを取ることです。Fiddlerを引き出し、クライアントが有効なリクエストを送信していることを確認します。

于 2009-06-11T18:43:36.440 に答える
1

私はついにこれを理解しました!

すべての場所のSOについては、この質問を参照してください

それは私の主な問題(#1)を解決しました。さまざまなバインド WCF プロパティを構成する方法の明確な説明をまだ探しています。オンライン、書籍、および MSDN の API ドキュメントを調べました。誰かがそれを本当に綴っているものを知っているなら、ここに投稿してください。バインディングの詳細に入るまで、WCF はかなり単純なようです。

于 2009-06-12T22:43:10.817 に答える