我想在 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
一一使用和处理消息。
我是否需要创建一个单独的线程来在队列中发送消息?