簡體   English   中英

調用WCF回調方法時的正確異常處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM