1

WCF コールバック チャネルで OneWay イベントを使用していくつかのアクションをログに記録したい

次のようないくつかの方法があります。

[OperationContract(IsOneWay = true)]
void LogSomething(String txt);

私のコールバックチャンネルで。メッセージを送信するためにサブスクライブされたすべてのロガー インスタンスを繰り返し処理していますが、そのうちの 1 つが適切に切断されず、チャネル接続を閉じない場合、アプリケーション全体がハングアップします。次に、チェックします:

((ICommunicationObject)callback).State == CommunicationState.Opened

true を返すため、チャネルが壊れていないかどうかを確認することさえできません。

ConcurrencyMode.MultipleInstanceContextMode.PerCallすでに設定されています。

これを処理する最善の方法は何ですか? .NET 4.0 を使用しています

私の研究から、コードを次のように設定AsyncPatternして変更する必要があります。true

[OperationContractAttribute(OneWay=true, AsyncPattern=true)]
IAsyncResult BeginLogSomething(String txt, AsyncCallback callback, object asyncState);

void EndLogSomething(IAsyncResult result);

しかし、それを行うより良い方法はありますか?可能であれば、クライアント側のコードを変更したくありません。それでもSynchronizationContext、メッセージを 1 つずつ使用して処理したいと考えています。

メッセージをキューに送信する別のスレッドを作成する必要がありますか?

4

0 に答える 0