【发布时间】:2012-03-28 11:38:53
【问题描述】:
我有一系列 WCF 服务,它们根据服务器端的事件再次调用客户端上的方法(使用 WcfDuplexChannels)。但是,似乎有相当多的异常可能发生,所以现在我在每一行回调客户端的周围都有一个巨大的 try/catch 块,以禁用事件结束,以防发生任何异常。除了每次都写起来很麻烦之外,我不确定是否可以通过只捕获一些基本异常来简化 try catch 块?现在我并不关心导致异常的原因(我不在乎它是否出现故障、中止、处置或超时),但我确实记录了不同的异常。
我还阅读了有关 IErrorHandler 的信息,但在客户端上调用方法时这真的适用吗?
这是我当前策略的一个示例:
private void OnProductChanged(List<DTO> products)
{
try
{
client.OnProductChanged(products);
return;
}
catch (TimeoutException)
{
log.Info("Communication to client timed out.");
}
catch (CommunicationObjectAbortedException)
{
log.Info("Connection to client is in aborted state.");
}
catch (CommunicationObjectFaultedException)
{
log.Info("Connection to client is in faulted state.");
}
catch (CommunicationException ce)
{
log.InfoFormat("CommunicationException occured on product change notification: {0}.", ce.Message);
}
catch (ObjectDisposedException)
{
log.Info("Communication channel is disposed.");
}
catch (Exception e)
{
log.WarnFormat("Unhandled {0} on client callback: {1}", e.GetType(), e.Message);
}
SendProductChanged = false;
}
SendProductChanged = false; 行将负责解除绑定事件处理程序。
【问题讨论】:
标签: c# wcf exception-handling