現象
次のような状況を考えます。
-
Microsoft.NET Framework 3.0 または 3.5 の.NET Framework ベースの Windows Communication Foundation (WCF) サービスを実行するとします。
-
WCF サービスは、Net.Tcp ポート共有サービス (Smsvchost.exe) を使用し、インターネット インフォメーション サービス (IIS) を実行しているコンピューターでホストされています。
-
次の条件のいずれかが成立します。
-
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 を再起動する必要があります。
原因
この問題は、W3wp.exe のワーカー プロセスに受信接続要求を転送しようとするとき、1 分後、Smsvchost.exe プロセスがタイムアウトしたために発生します。また、このタイムアウトは変更できません。
CPU が負荷には、あるとき、または多数の同時接続要求が着信すると、Smsvchost.exe プロセスは 1 分以内の着信接続を W3wp.exe のワーカー プロセスに転送できません。したがって、Smsvchost.exe プロセスがタイムアウトし、最終的に応答を停止します。この問題が発生した場合、Smsvchost.exe プロセスは、IIS が再起動されるまで、W3wp.exe のワーカー プロセスに要求をルーティングできません。
解決策
この問題を解決するには、マイクロソフト サポート技術情報 (KB) の資料に記載された修正プログラム 2504602 を適用します。
詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料をご参照ください。
2504602修正プログラム ロールアップ パッケージは、WCF は、.NET Framework 3.0 sp2 では、.NET Framework 3.5 sp1 では、.NET Framework 4 で使用できます。
状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。