【发布时间】:2012-04-21 14:38:28
【问题描述】:
我有一个 WCF 实现,并将其托管在 Windows 服务中(自托管)。我使用回调合约来触发客户端的一些事件。
问题是我如何确定或检查客户端是否仍然活着以触发其回调事件。有没有检查机制?我使用.NET 3.5。
谢谢。
【问题讨论】:
标签: wcf wcf-client
我有一个 WCF 实现,并将其托管在 Windows 服务中(自托管)。我使用回调合约来触发客户端的一些事件。
问题是我如何确定或检查客户端是否仍然活着以触发其回调事件。有没有检查机制?我使用.NET 3.5。
谢谢。
【问题讨论】:
标签: wcf wcf-client
【讨论】:
我解决相同问题的方法是创建一个“DefaultCallback”类,它实现回调接口并且什么都不做(它当然不会抛出任何 Not ImplmentedException)。 然后你可以写一点这样的代码:
private IServiceCallBack[] GetCallBack()
{
var returnValue = new IServiceCallBack[1];
var com = (ICommunicationObject)(returnValue[0] = OperationContext.Current.GetCallbackChannel<IServiceCallBack>());
com.Closing += new EventHandler((object sender, EventArgs e) =>
{
returnValue[0] = new DefaultCallBack();
});
com.Faulted += new EventHandler((object sender, EventArgs e) =>
{
returnValue[0] = new DefaultCallBack();
});
return returnValue;
}
因此,每当回调客户端处于关闭或故障状态时,它都会被一个不执行任何操作的兼容对象替换。
【讨论】: