1

我想在 WCF 回调通道上使用 OneWay 事件记录一些操作

我有几种方法,例如:

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

在我的回调频道上。我正在遍历每个订阅的记录器实例以发送消息,但是如果其中一个不能正确断开连接并且不会关闭通道连接,则整个应用程序都会挂起。然后甚至检查:

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

返回 true 所以我什至无法检查通道是否没有损坏。

ConcurrencyMode.Multiple并且InstanceContextMode.PerCall已经设置好了。

处理这个问题的最佳方法是什么?我正在使用 .NET 4.0

根据我的研究,我需要设置AsyncPattern并将true我的代码更改为:

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

void EndLogSomething(IAsyncResult result);

但是有没有更好的方法呢?如果可能的话,我不想更改客户端的代码 - 我仍然想SynchronizationContext一一使用和处理消息。

我是否需要创建一个单独的线程来在队列中发送消息?

4

0 回答 0