我们的应用程序由 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)。