调用WCF服务的多种方法

我有一个类用我的WCF服务处理我的应用程序中的所有交互,似乎MSDN说使用With)_语句与WCF是坏的 - 我可以看到为什么这是坏的并同意它(http:/ /msdn.microsoft.com/en-us/library/aa355056.aspx) 我的问题是,他们建议的实现方法将意味着我有10个方法[作为我的服务中的10个公共方法]将具有相同的结构代码,这当然不遵循DRY主体 - 代码看起来类似于以下:
try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (CommunicationException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (TimeoutException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (Exception ex)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
    throw;
}
这还没有任何日志记录,当然,当我开始记录它时,我将不得不在几乎10个不同的地方添加日志记录工作 有没有人有任何关于我如何在重用代码方面更有资源的提示 谢谢 保罗     
已邀请:
我会使用一些通用的,可配置的异常处理组件,它允许基本的异常处理处理,如日志记录,重新抛出等,与实际处理位置分离。此类组件的一个示例是Microsoft的异常处理应用程序块。 然后你可能会得到这样的代码:
try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (Exception ex)
{
    _client.CloseIfNeeded();
    if (!ex.Handle("Wcf.Policy")) throw;
}
其中
CloseIfNeeded
表示封装WCF通道关闭逻辑的自定义扩展方法,
Handle
异常方法调用异常处理机制,传入应在此位置应用的异常策略的名称。 在大多数情况下,您可以将异常处理逻辑减少到一行或两行代码,从而为您带来以下好处: 异常处理行为(策略)的即时可配置性 具有绑定到特定类型的异常和异常策略的自定义异常处理程序的可扩展性 更好的可管理性和代码的可读性     

要回复问题请先登录注册