0

サブスクライブされたモニターアプリケーションにエラーを公開するWindowsサービスでホストされているWCFサービスがあります。エラーをサービスに公開する2つのサーバーアプリケーションがあり、これらのエラーはサブスクライブされたモニターアプリケーションに送信されます。これは、WSDualHttpBindingを使用して行われます。

これは機能しますが、非アクティブ状態が長く続くと機能を停止し、信頼できるセッションに障害が発生したことを示すエラーが発生します。私はこの問題に関するいくつかの記事を読みましたが、それはそれを追跡するのに役立ちませんでした。必要な例外処理をすべて入れましたが、これは役に立ちません。

システムは、コードを投稿するのではなく、MSDNのリストベースのパブリッシュサブスクライブサンプルに基づいており、追加のエラーチェックと例外処理が含まれています。以下のリンク。

http://msdn.microsoft.com/en-us/library/ms752254.aspx

誰かがこれを引き起こしているアイデアを持っていますか?

4

2 に答える 2

1

非アクティブタイムアウトを増やす必要があるのは正しいです。ただし、信頼できるセッションを使用している場合は、receiveTimeoutも考慮されます。このMSDN記事から:

信頼できるセッションを使用する場合、接続を維持するために満たす必要のある2つの異なる非アクティブタイマーがあります。これらの非アクティブタイマーのいずれかがオフになると、接続が切断されます。

最初の非アクティブタイマーは信頼できるセッション上にあり、InactivityTimeoutと呼ばれます。この非アクティブタイマーは、タイムアウト期間内にアプリケーションまたはインフラストラクチャのいずれのメッセージも受信されなかった場合に起動します。インフラストラクチャメッセージは、アプリケーションデータを含むのではなく、チャネルスタック内のプロトコルの1つ(キープアライブや確認応答など)の目的で生成されるメッセージです。

2番目の非アクティブタイマーはサービス上にあり、バインディングのReceiveTimeout設定を使用します。この非アクティブタイマーは、タイムアウト期間内にアプリケーションメッセージが受信されない場合に起動します。これは、たとえば、サーバーがセッションで使用されるチャネルを閉じる前に、クライアントがサーバーに少なくとも1つのメッセージを送信するのにかかる最大時間を指定します。この動作により、クライアントはサーバーリソースを任意の期間保持できなくなります。

いずれかの非アクティブタイマーが起動すると接続が切断されるため、ReceiveTimeoutより大きくなるとInactivityTimeoutを増やしても効果はありません。これらのタイムアウトの両方のデフォルトは10分であるため、信頼できるセッションを使用する場合は、違いを生むために常に両方を増やす必要があります。

これらの値の両方を「無限」に設定する場合(構成ファイルを使用している場合)、またはTimeSpan.MaxValueコードでバインディングを設定している場合は、探しているものを実現する必要があります。

編集 1receiveTimeout値とinactivityTimeout値を「infinite」に設定すると、コンパイラーで警告が生成されます。これは大丈夫です。IDEは、そのキーワードを考慮しないXSLを使用します。舞台裏では、WCFはTimeSpanOrInfiniteConverterを使用してキーワードをTimeSpan.MaxValueに変換しています。 ソース

于 2011-08-25T12:58:22.110 に答える
0

私はこれを修正したようですが、私が行ったのは、バインディングをWSDualHTTPBindingからNetTcpBindngに変更することだけです。現在は48時間実行されていますが、以前は1時間以上実行されていませんでした。

于 2011-08-31T08:05:00.067 に答える