我们的应用程序由2个应用程序域组成。 辅助应用程序域中的某些方法调用(日志记录)必须“重定向”到第一个应用程序域。
这是通过在主appdomain上设置WCF服务并让辅助appdomain调用其操作来完成的。
例如,这是在第二个AppDomain中运行的代码:
Logger.Debug("Message");
将在内部重定向为对第一个AppDomain的WCF服务调用:
public void Debug(string message)
{
if (useService)
{
logProxy.Log(message);
}
}
问题是,在随机场合,我看到服务代理转换为故障状态。
深入挖掘,我发现当服务调用的线程关闭时,代理对象在某些情况下会出现故障。
我的问题是 - 如何保护自己免受执行WCF服务调用的情况,但启动调用的线程会被关闭? (可能在收到回复之前)。
此外 - ClientBase是否优于使用ChannelFactory选项创建客户端代理?
我的设置的一些额外细节:
答案 0 :(得分:1)
只有客户才能处理此事。
ServiceClient client = new ServiceClient();
try {
client.Operation();
}
catch(Exception ex)
{
if (client.State == CommunicationState.Faulted)
{
client.Abort();
client = new ServiceClient();
}
}