2009-08-06 10 views
0

私のアプリケーションには、50のサービスエンドポイント(/mysite/myService.svcなど)があります。これはIISでホストされています。断続的に(2〜3日に1回)サービスが応答を停止します。ハングするサービスは決して同じではありません。サービスが停止している間、他のサービスの一部は正常に動作し、他のサービスは停止しています。WCFサービスがハングし、クライアントがServiceModel.CommunicationExceptionを受け取ります。

(別のコンピュータからの)すべてのクライアントがこのエラーを取得:

ServiceModel.CommunicationException 

Message: An error occurred while receiving the HTTP response to 
https://server/mysite/myservice1.svc. 

This could be due to the service endpoint binding not using the HTTP 
protocol. This could also be due to an HTTP request context being 
aborted by the server (possibly due to the service shutting down). 
See server logs for more details. 

ませ例外は、クライアントがハングしているサービスを呼び出そうとしたときに、サーバーによって提起されていません。私が持っているのはクライアント側のエラーです。

問題を解決するには、アプリケーションプールを手動でリサイクルする必要があります。

原因が分かっていますか?どうすればこの問題を調査できますか?私はサービスが掛かっているときにワーカープロセスのメモリダンプを取るつもりですが、ダンプ内で何を検索するのかわかりません。

更新日(2009年8月13日):私は、サーバーの接続が不足しているという考えをほとんど排除しています(Shiraz Bhaijiの回答を参照)。私は新しいリードを持っているかもしれません:すべてのサーバー側の例外をログファイルに記録します。理論的には、これがクライアント上で発生すると、サーバー上で例外は発生しません。さもなければ私はログの中でそれを証明するだろう。しかし、サーバー上でエラーが発生しても、例外が例外処理コードにルーティングされない低レベルで発生している場合はどうなりますか?低レベルの例外を処理できないシナリオについては、this questionと掲載しました。私は調査の進捗状況をあなたに知らせます。

答えて

1

これを解決するために、バインディングでestablishSecurityContextをFalseに設定します。

0

私はこの特定の問題に遭遇していませんが、サービスやクライアントアプリケーションの設定でWCFサービスのトレース/メッセージロギングを有効にすることをお勧めします。ここ数日、トラブルシューティングが必要なサービスのためにこの作業を行っています。

MSDNのリンクhereは良い出発点です。

構成可能なトレースの詳細レベルについては、thisの表も参照してください。例外のログのみから完全なメッセージの詳細に進むことができるいくつかのレベルがあります。これをapp.configファイルに設定するのは非常に簡単です。

ログファイルの出力を解析するには、Windows SDKに付属のSvcTraceViewer.exeを使用します。インストールされている場合は、このフォルダーにあります。C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0 \ Bin

1

あなたは接続が不足しているようです。

デフォルトでは、WCFにはタイムアウトが設定されているため、10分間接続が開いています。

アプリケーションプールをリサイクルすると、すべての接続が閉じられているため、再び機能します。

コードを確認して接続を閉じる/プロキシを処分することを確認してください。

+0

クライアントは接続を終了します(私たちはクライアントアプリケーションを制御します)が、それは良い点です。たとえば、クライアントアプリケーションがクラッシュした場合(または強制終了した場合)、プロキシを閉じるチャンスがない可能性があります。しかし、このような場合、最大接続数に達した場合、サーバーはエラーをスローしませんか? – Sylvain

+0

サーバー上のreceiveTimeoutを試してみましょう。タイムアウトを開始すると、クライアントがプロキシを終了する方法に問題があることが示されます。 – Sylvain

+0

私はreceiveTimeoutを下げました。それは何も変わらなかった。私は接続がなくなったという考えを排除しようとしています。私は制御された環境でテストを行いました:サーバが接続を使い切ったとき、クライアントが受け取るエラーは、TimoutExceptionです。だから私はそれが別のものだと思う。 – Sylvain

関連する問題