我有一个类来处理我的应用程序中与我的WCF服务的所有交互,并且似乎MSDN认为使用using)_语句与WCF很差 - 我可以看到为什么会这样是不好的,并同意它(http://msdn.microsoft.com/en-us/library/aa355056.aspx)调用WCF服务的多种方法
我的问题是,他们建议的实现方法将意味着我有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个不同的地方添加日志记录工作
没有任何人有任何提示我如何可以更有机会在这里重用代码
感谢
保罗
我认为你有S中的解决方案uggested非常好。扩展方法的使用将使这非常有用 - 如果我扩展System.ServiceModel.ClientBase与CloseIfNeeded()你认为这将是一个好的或坏的举动? – stack72 2010-10-06 13:30:28
如何为'System.ServiceModel.ICommunicationObject'实现它?这将更符合该接口的架构意图,该接口为通信状态管理提供原语。 – 2010-10-06 13:46:12
虐待给了一个去 - 谢谢:) – stack72 2010-10-06 15:06:12