0

Winform クライアントによって呼び出される WCF サービス メソッドがあります。クライアントがいくつかの文字列をメソッドに渡すと、メソッドは 20 分以上かかる一連の操作を実行します。プロセスの約 15 分後に、クライアントは TCP 接続が終了したという応答を受け取ります。WCF サービスは、ジョブが完了するまで、この時点以降も処理を続けます。クライアントのバインディング構成でタイムアウトをそれぞれ 30 分に設定しました。また、コンパイル バッチのタイムアウトを 30 分に設定しました。WCF サービスはクライアントに "Success" という文字列を返すため、送信に関するサイズの問題ではありません。何らかのタイムアウトが原因で、IIS が TCP 接続を終了しているように見えます。

http://xxxxxxxxxxxxx.svcへの HTTP 応答の受信中にエラーが発生しました。これは、サービス エンドポイント バインディングが HTTP プロトコルを使用していないことが原因である可能性があります。これは、HTTP 要求コンテキストがサーバーによって中止されたことが原因である可能性もあります (サービスのシャットダウンが原因である可能性があります)。詳細については、サーバー ログを参照してください。内部例外: 基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。内部例外: トランスポート接続からデータを読み取ることができません: 既存の接続がリモート ホストによって強制的に閉じられました。内部例外: 既存の接続がリモート ホストによって強制的に閉じられました

何か助けはありますか?エラーは、wcf サービスではなく、winform クライアントによって生成されます。

バインド設定は次のとおりです。

<wsHttpBinding>
  <binding name="WSHttpBinding_STUFFGOESHERE" closeTimeout="00:30:00"
   openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
   bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
   maxBufferPoolSize="524288000" 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:30:00"
    enabled="false" />
   <security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
    realm="" />
   <message clientCredentialType="Windows" negotiateServiceCredential="true"
    algorithmSuite="Default" />
  </security>
 </binding>
 </wsHttpBinding>
4

1 に答える 1

0

httpbinding でタイムアウトを設定しましたか? コードで:

((WSHttpBinding)binding).OpenTimeout = new TimeSpan(0, 1, 0);
((WSHttpBinding)binding).CloseTimeout = new TimeSpan(0, 1, 0);
((WSHttpBinding)binding).SendTimeout = new TimeSpan(0, 30, 0);
((WSHttpBinding)binding).ReceiveTimeout = new TimeSpan(0, 30, 0);

またはサービス構成ファイルで

<bindings>
  <wsHttpBinding>
    <binding openTimeout="00:1:00" 
             closeTimeout="00:1:00" 
             sendTimeout="00:30:00" 
             receiveTimeout="00:30:00">
    </binding>
  </wsHttpBinding>
</bindings>

http://msdn.microsoft.com/en-us/library/hh924831.aspxも参照してください。

于 2013-04-25T19:46:02.943 に答える