[英]Proper exception handling when invoking WCF callback method
我有一系列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;
行將解開事件處理程序的綁定。
您可以編寫一個包裝函數方法,該方法將Funcs的動作作為參數,並且可以在此函數內使用try catch塊。 您可以使用此函數來調用函數; 就像是:
public void CallMethod(Action methodToBeCalled)
{
try
{
methodToBeCalled();
}
catch
.....
....
}
然后像下面這樣調用您的函數:
CallMethod(() => client.OnProductChanged(products));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.