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)。

WCF 通道随机变为“故障”(在线程终止时)

只有客户端可以处理这个问题。

ServiceClient client = new ServiceClient();
 try {
     client.Operation();
 }
 catch(Exception ex)
 {
     if (client.State == CommunicationState.Faulted)
     {
             client.Abort();
             client = new ServiceClient();
     }
 }