WCF 通道随机变为“故障”(在线程终止时)
本文关键字:线程 终止 故障 随机 通道 WCF | 更新日期: 2023-09-27 18:35:11
我们的应用程序由 2 个应用程序域组成。辅助应用程序域中的某些方法调用(日志记录)必须"重定向"到第一个应用程序域。
这是通过在主应用程序域上设置 WCF 服务并让辅助应用程序域调用其操作来完成的。
例如,下面是在第二个应用程序域中运行的代码:
Logger.Debug("Message");
将在内部作为 WCF 服务调用重定向到第一个应用域:
public void Debug(string message)
{
if (useService)
{
logProxy.Log(message);
}
}
问题是,在随机情况下,我看到服务代理转换为故障状态。
深入挖掘,我发现当进行服务调用的线程关闭时,在某些情况下代理对象会出错。
我的问题是 -- 如何保护自己免受执行 WCF 服务调用但启动调用的线程关闭的情况的影响?(可能在收到回复之前)。
另外 - ClientBase是否优于使用ChannelFactory选项来创建客户端代理?
关于我的设置的一些额外细节:
- WCF 服务通过 NetNamedPipeBinding (命名管道) 公开
- 我正在使用ChannelFactory.CreateChannel方法来创建"客户端"代理(不是ClientBase)。
只有客户端可以处理这个问题。
ServiceClient client = new ServiceClient();
try {
client.Operation();
}
catch(Exception ex)
{
if (client.State == CommunicationState.Faulted)
{
client.Abort();
client = new ServiceClient();
}
}