2

まず第一に、申し訳ありませんが、私は流暢ではありません。

コール数/秒率が高い環境でWCFサービスが機能しなくなる理由を理解しようとしています。タイムアウトを増やすだけで問題が解決するかどうかはわかりません。

2つのWebサービスがあります。

  • 1つ目は、IIS 7.5、Windows Server 2008 R2 Enterprise SP1 x64、AppFabric(およびWAS)でホストされています。
  • 次に、Windowsサービス、Windows 2003 R2SP1x86でホストされます

両方のWebサービスの構成は最小限です。認証なし、トランザクションなし、メッセージの特別な処理なし。バインディングを確認してください。

<netTcpBinding>
    <binding  transactionFlow="false">
      <security mode="None">
        <message clientCredentialType="None" />
        <transport clientCredentialType="None"></transport>
      </security>
      <reliableSession enabled="false"/>
    </binding>
  </netTcpBinding>

現実性と速度のために、Net.Tcpバインディングを使用しようとしています。

事実1-Net.Tcpバインディングが主な理由

負荷が高くなると、チャネルNet.Tcpは機能を停止します。それでおしまい!しかし、BasicHttpはまだ魅力のように機能しています。

WindowsService:チャネルnet.tcpは、動作を再開する前に数分間(3m〜10m)停止します(ITSELFによって、何も変更せずに。Goblinsは懸命に動作しています)。

AppFabric / IIS / WAS:チャネルnet.tcpは停止します。手動で再起動する必要があります。

BasicHttpBindingの構成はnet.tcpに似ています。セキュリティ上の懸念などがなくても、メッセージを処理する必要はありません。

事実2-ログの種類なし

何が起こっているのかを理解するための種類、ヒント、トリックを見つけることができませんでした。メモリ、イベントログ、System.Diagnosticsをダンプしてみましたが、何も関係ありません。最も関連性の高いヒントは、SMSvcHost4.0.0.0からのエラーです。

複製されたソケットのディスパッチ中にエラーが発生しました:このハンドルは現在、プロセスでリークされています。ID:2272ソース:System.ServiceModel.Activation.TcpWorkerProcess / 62875109例外:System.TimeoutException: http ://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymousに送信されたこの要求操作は 、構成されたタイムアウト(00:01:00)。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。これは、サービスがまだ操作を処理しているためか、サービスが応答メッセージを送信できなかったためである可能性があります。(チャネル/プロキシをIContextChannelにキャストし、OperationTimeoutプロパティを設定することにより)操作タイムアウトを増やすことを検討し、サービスがクライアントに接続できることを確認してください。

サーバースタックトレース:System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)at System.ServiceModel.Channels.ServiceChannel.EndCall(String action、Object [] outs、IAsyncResult result)at System.ServiceModel.Channels.ServiceChannelProxy.InvokeEndService(IMethodCallMessage methodCall、ProxyOperationRuntime operation)at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

[0]で再スローされた例外:System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult result)
at System.ServiceModel.Activation.WorkerProcess.EndDispatchSession(IAsyncResult result)プロセス名:SMSvcHostプロセスID:1532

この問題を解決するのに役立つヒントや構成のコツはありますか?

高負荷のシナリオに最適な構成は何ですか?

4

2 に答える 2

3

Visual Studioまたはsvcutilツールを使用してサービス参照を生成した場合は、プロキシのCloseメソッドまたはAbortメソッドを常に呼び出すようにしてください。これらのメソッドを呼び出すのを忘れたため、数日前に同様の問題が発生しました。

于 2012-09-12T09:42:42.100 に答える
0

それに応じてClose()メソッドとAbort()メソッドを呼び出していても、このエラーが発生する場合は、次のシナリオを検討してください。

  1. Microsoft .NETFramework3.0ベースまたは.NETFramework3.5ベースのWindowsCommunicationFoundation(WCF)サービスを実行します。

  2. WCFサービスは、Net.Tcpポート共有サービス(Smsvchost.exe)を使用し、インターネットインフォメーションサービス(IIS)を実行しているコンピューターでホストされます。

  3. 次の条件のいずれかが当てはまります。

    • IISを実行しているコンピューターのCPU使用率が高くなっています。
    • スロットルは、WCFサービスのサービスモデルで発生します。
    • 複数の要求が同時にWCFサービスに送信されます。

このシナリオでは、WCFサービスがクライアントアプリケーションからの要求を処理するのに1分以上かかります。さらに、次のイベントエントリをアセンブルするエラーメッセージがイベントログに記録されます。

ログ名:システム

ソース:SMSvcHost 3.0.0.0

日にち:

イベントID:8

タスクカテゴリ:共有サービス

レベル:エラー

キーワード:クラシック

ユーザー:ローカルサービス

コンピューター:

説明:複製されたソケットのディスパッチ中にエラーが発生しました:このハンドルがプロセスでリークされるようになりました。

ID:2620

ソース:System.ServiceModel.Activation.TcpWorkerProcess

例外:

System.TimeoutException:に送信されたこの要求操作は、構成されたタイムアウト(00:01:00)内に応答を受信しませんでした。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。これは、サービスがまだ操作を処理しているためか、サービスが応答メッセージを送信できなかったためである可能性があります。(チャネル/プロキシをIContextChannelにキャストし、OperationTimeoutプロパティを設定することにより)操作タイムアウトを増やすことを検討し、サービスがクライアントに接続できることを確認してください。

注:この問題からWCFサービスを回復するには、IISを再起動する必要があります。

原因:

この問題は、Smsvchost.exeプロセスが着信接続要求をW3wp.exeワーカープロセスに転送しようとしたときに1分後にタイムアウトになるために発生します。さらに、このタイムアウトは構成できません

CPUのワークロードが大きい場合、または多数の同時接続要求が着信している場合、Smsvchost.exeプロセスは、着信接続を1分以内にW3wp.exeワーカープロセスに転送できません。したがって、Smsvchost.exeプロセスがタイムアウトし、最終的に応答を停止します。この問題が発生すると、IISが再起動されるまで、Smsvchost.exeプロセスはそれ以降の要求をW3wp.exeワーカープロセスにルーティングできません。

解決:

マイクロソフトは、マイクロソフトサポート技術情報(KB)の記事に記載されているホットフィックス2504602を適用することをお勧めします。このホットフィックスは、.NET Framework 3.0 SP2、.NET Framework 3.5 SP1、および.NETFramework4のWCFで利用できます。

さらに、Microsoftは.Net Framework 4.5でこの問題を解決したと主張しているため、最新バージョンにアップグレードする必要があります。

.Net Framework 4.5にアップグレードしても問題が解決しない場合、回避策は、smsvchost.exe.configファイルを変更して、タイムアウトと保留中の受け入れおよびその他のさまざまなパラメーターを増やすことです。

于 2020-02-06T22:20:29.943 に答える