15

負荷条件下でこのエラーが発生する WCF サービスがあります (それ以外の場合はエラーを再現できないようです)。私たちは、そのような運がないので、約1週間それを回避する方法を見つけようとしています..

表示されるエラーには 2 つの部分があります。

System.ServiceModel.CommunicationException: エラー: (要求は中止されました: 要求は取り消されました。) http チャネル経由でデータを送信中に発生しました。

と:

System.Net.WebException: 要求は中止されました: 要求はキャンセルされました。

Reference.csファイル内のメソッドをオーバーロードして を設定することでキープアライブの使用を無効にすることを多くの人が提案しているのを見てきましたがKeepAlive = false、クライアント側は (Web 参照に加えて) サービス参照を使用しており、このオプションはもう存在しません。

私が見た別のオプションは、BasicHttpBinding現在使用しているのではなく、サービスにカスタム Binding を追加することでしたが、これは、webReference を使用していた人への webservice の後方サポートを煩わしくします ( CustomBindingSOAP が有効になっていないため)。

以前にこのエラーに対処した人はいますか? サーバー側に影響を与えずに WCF でキープアライブを無効にする方法はありますか? このエラーを引き起こすことが知られている他のものはありますか?

4

5 に答える 5

8

HTTPキープアライブがこれに責任があるとは思いません。WCF はこれを単独で処理できる必要があるため、HTTP 永続接続は要求間で共有され、有効期限が切れた場合 (数百秒の非アクティブ後に期限切れになる)、WCF は例外を発生させずに新しい接続を作成します。リクエストの送信中に接続が中断された場合、他の問題が発生することが予想されます。

このカスタム バインディングは、HTTP キープ アライブなしの BasicHttpBinding と同等のものとして使用できます。

<bindings>
  <customBinding>
    <binding name="NoKeepAlive">
      <textMessageEncoding messageVersion="Soap11" />
      <httpTransport keepAliveEnabled="false" />
    </binding>
  </customBinding>
</bindings> 
于 2010-10-10T11:38:08.597 に答える
2

私はこれとまったく同じ問題を抱えていました。私の場合、リクエストを ASynchronously 実行していました。クライアントから「サーバー」に数百のリクエストを送信していました。私はbasicHttpBindingを使用しています/使用していました。私の app.config 設定では、openTimeout プロパティが 60 秒または 1 分に設定されていました。それを10分などの大きな数値に設定すると、問題はなくなりました.

たとえば、app.config ファイルでこれらすべての値を変更しました。

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IScriptRunHost" closeTimeout="00:10:00"
                    openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"

から10分。

于 2011-09-06T11:35:03.037 に答える