Вы можете написать метод-обертку, который получит код для выполнения вызова службы, переданного делегатом:
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));