我有一个类,用我的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个不同的地方添加记录工作
有没有人知道如何在重用代码
中获得更多资源感谢
保
答案 0 :(得分:5)
我会使用一些通用的,可配置的异常处理组件,它允许基本的异常处理处理(如日志记录,重新抛出等)与实际处理位置分离。这种组件的一个例子是微软的Exception Handling Application Block。
然后你可能会得到这样的代码:
try
{
results = _client.MethodCall(input parameteres);
_client.Close();
}
catch (Exception ex)
{
_client.CloseIfNeeded();
if (!ex.Handle("Wcf.Policy")) throw;
}
其中CloseIfNeeded
表示封装WCF通道关闭逻辑的自定义扩展方法,Handle
异常方法调用异常处理机制,传入应在此处应用的异常策略的名称的地方。
在大多数情况下,您可以将异常处理逻辑减少到一两行代码,从而为您带来以下好处: