1

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

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

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

Logger.Debug("Message");

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

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

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

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

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

另外——ClientBase 是否优于使用 ChannelFactory 选项来创建客户端代理?

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

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

1 回答 1

1

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

ServiceClient client = new ServiceClient();
 try {
     client.Operation();
 }
 catch(Exception ex)
 {
     if (client.State == CommunicationState.Faulted)
     {
             client.Abort();
             client = new ServiceClient();
     }
 }
于 2012-05-22T19:41:23.933 回答