我有一个类,可以处理我的应用程序中的所有互动与WCF服务,并且MSDN说使用使用)_与WCF语句的使用很不好 - 我可以明白为什么这是不好的并且同意的(http:/ http:/ /msdn.microsoft.com/en-us/library/aa355056.aspx)

我的问题是他们建议的实施方法将意味着我有10种方法(作为我服务中的10种公共方法),该方法将具有相同的结构代码,并且当然不遵循干燥的主体 - 该代码看起来与以下内容相似:

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;
}

这还没有任何记录

有人有什么技巧关于我如何在重复使用代码方面更具机智的技巧

谢谢

保罗

有帮助吗?

解决方案

我将使用一些通用的,可配置的异常处理组件,这些组件允许基本异常处理处理(如日志记录,重新启动等)与实际处理的实际位置解耦。这种组件的一个示例是Microsoft的 异常处理申请块.

然后,您可以最终得到这样的代码:

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (Exception ex)
{
    _client.CloseIfNeeded();
    if (!ex.Handle("Wcf.Policy")) throw;
}

在哪里 CloseIfNeeded 表示封装WCF通道关闭逻辑的自定义扩展方法,并 Handle 异常方法称为异常处理机制,以应在此地方应用的异常策略的名称传递。

在大多数情况下,您可以将异常处理逻辑减少为一或两行代码,从而给您一些好处:

  • 异常处理行为的即时可配置性(策略)
  • 与特定类型的异常和异常策略约束的自定义异常处理程序的可扩展性
  • 更好的可管理性和代码的可读性
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top