WCF通道随机变为Faulted(在线程终止时)

时间:2012-05-22 19:30:29

标签: c# .net wcf

我们的应用程序由2个应用程序域组成。 辅助应用程序域中的某些方法调用(日志记录)必须“重定向”到第一个应用程序域。

这是通过在主appdomain上设置WCF服务并让辅助appdomain调用其操作来完成的。

例如,这是在第二个AppDomain中运行的代码:

Logger.Debug("Message");

将在内部重定向为对第一个AppDomain的WCF服务调用:

public void Debug(string message)
{
    if (useService)
    {
        logProxy.Log(message);
    }
}

问题是,在随机场合,我看到服务代理转换为故障状态。

深入挖掘,我发现当服务调用的线程关闭时,代理对象在某些情况下会出现故障。

我的问题是 - 如何保护自己免受执行WCF服务调用的情况,但启动调用的线程会被关闭? (可能在收到回复之前)。

此外 - ClientBase是否优于使用ChannelFactory选项创建客户端代理?

我的设置的一些额外细节:

  • WCF服务通过NetNamedPipeBinding(命名管道)公开
  • 我使用ChannelFactory.CreateChannel方法创建“客户端”代理(不是ClientBase)。

1 个答案:

答案 0 :(得分:1)

只有客户才能处理此事。

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