0
我有一系列的WCF服務,它們根據服務器端的事件再次調用客戶端上的方法(使用WcfDuplexChannels)。但是,似乎有一些可能會發生的異常,所以現在我在每一行回調客戶端都有一個巨大的try/catch塊,最後在發生任何異常時禁用該事件。除了繁瑣的寫每一次,我不確定是否可以通過捕獲幾個基本例外來簡化try catch塊?現在我並不在意是什麼導致異常(我不在乎它是故障,中止,處理還是超時),但是我記錄了不同的異常。調用WCF回調方法時的正確異常處理
我也讀過關於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;
線將解除綁定事件處理程序的照顧。
這已經跨越了我的腦海裏。我特別感興趣的是,如果有人會對我的問題的IErrorHandler部分做出反應,否則我認爲您的答案可能會達到最佳效果。謝謝! – mycroes 2012-03-28 11:57:25
多年後,我回頭看這個問題,這正是我現在這樣做的方式。捕獲已經發生了一些變化,我的服務已經更改爲單實例,所以如果發生某些異常類型,客戶端將從客戶端列表中刪除。 – mycroes 2017-09-15 12:10:10