我有一系列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;
行将负责解除事件处理程序的绑定。
答案 0 :(得分:1)
您可以编写一个包装器方法,将Funcs的动作作为参数,您可以在此函数中使用try catch块。您可以使用此功能调用您的函数;类似的东西:
public void CallMethod(Action methodToBeCalled)
{
try
{
methodToBeCalled();
}
catch
.....
....
}
然后调用您的函数:
CallMethod(() => client.OnProductChanged(products));