Есть ли способ обработать ошибки сервера WCF в одном месте на клиенте? - PullRequest
2 голосов
/ 20 декабря 2010

Прямо сейчас я упаковываю все свои вызовы службы WCF в следующий блок try / catch, и мне интересно, есть ли способ установить это в одном месте и применить его ко всем вызовам службы.

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010

Вы можете написать метод-обертку, который получит код для выполнения вызова службы, переданного делегатом:

public T ServiceCallWrapper<T>(Func<T> serviceCallDelegate)
{
    try
    {
        return serviceCallDelegate();
    }
    catch (TimeoutException ex)
    {
        WPFMessageBox.Show("The service operation timed out." + ex.Message);
    }
    catch (FaultException<CustomFault> ex)
    {
        WPFMessageBox.Show("CustomFault:" + ex.ToString());
    }
    catch (FaultException ex)
    {
        WPFMessageBox.Show("Unknown Fault:" + ex.ToString());
    }
    catch (CommunicationException ex)
    {
        WPFMessageBox.Show("There was a communication problem" + ex.Message +
                            ex.StackTrace);
    }
}

Затем вы можете вызвать обертку, например, с помощью анонимного метода, такого как:*

Product test = ServiceCallWrapper<Product>(() => client.GetProductById(1));
1 голос
/ 21 декабря 2010

Вы можете сделать это через AoP и IoC.

Здесь я написал как: http://pablocastilla.wordpress.com/2010/11/09/aop-and-ioc-in-wcf-4-0-with-enterprise-library-5-and-appfabric-part-1/

Вот пример кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...