调用WCF服务的多个方法
我有一个类处理我的应用程序中与我的WCF服务的所有交互,似乎MSDN说与WCF一起使用Using)uu语句是不好的-我可以理解为什么这是不好的,并同意它(http://msdn.microsoft.com/en-us/library/aa355056.aspx) 我的问题是,他们建议的实现方法将意味着我有10个方法[作为我服务中的10个公共方法]具有相同的结构代码,这当然不符合DRY原则-代码看起来类似于以下内容:调用WCF服务的多个方法,wcf,design-patterns,principles,Wcf,Design Patterns,Principles,我有一个类处理我的应用程序中与我的WCF服务的所有交互,似乎MSDN说与WCF一起使用Using)uu语句是不好的-我可以理解为什么这是不好的,并同意它(http://msdn.microsoft.com/en-us/library/aa355056.aspx) 我的问题是,他们建议的实现方法将意味着我有10个方法[作为我服务中的10个公共方法]具有相同的结构代码,这当然不符合DRY原则-代码看起来类似于以下内容: try { results = _client.MethodCall(i
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个不同的地方添加日志记录工作
有没有人能告诉我如何在重用代码方面变得更加足智多谋
谢谢
paul我将使用一些通用的、可配置的异常处理组件,允许将日志记录、重新抛出等基本异常处理与实际处理位置分离。这种组件的一个例子是微软的 然后您可能会得到如下代码:
try
{
results = _client.MethodCall(input parameteres);
_client.Close();
}
catch (Exception ex)
{
_client.CloseIfNeeded();
if (!ex.Handle("Wcf.Policy")) throw;
}
其中,CloseIfNeeded
表示封装WCF通道关闭逻辑的自定义扩展方法,Handle
异常方法调用异常处理机制,传入应在此位置应用的异常策略的名称
在大多数情况下,您可以将异常处理逻辑简化为一行或两行代码,从而获得以下好处:
- 异常处理行为(策略)的即时可配置性
- 可扩展性,自定义异常处理程序绑定到特定类型的异常和异常策略
- 更好的代码可管理性和可读性
try
{
results = _client.MethodCall(input parameteres);
_client.Close();
}
catch (Exception ex)
{
_client.CloseIfNeeded();
if (!ex.Handle("Wcf.Policy")) throw;
}
其中,CloseIfNeeded
表示封装WCF通道关闭逻辑的自定义扩展方法,Handle
异常方法调用异常处理机制,传入应在此位置应用的异常策略的名称
在大多数情况下,您可以将异常处理逻辑简化为一行或两行代码,从而获得以下好处:
- 异常处理行为(策略)的即时可配置性
- 可扩展性,自定义异常处理程序绑定到特定类型的异常和异常策略
- 更好的代码可管理性和可读性
System.ServiceModel.ICommunicationObject
实现它?这将更符合该接口的体系结构意图,该接口为通信状态管理提供了原语。我认为您建议的解决方案非常好。使用扩展方法将使其非常有用-如果我使用closeIfRequired()扩展System.ServiceModel.ClientBase,您认为这是一个好的举措还是一个坏的举措?如何为System.ServiceModel.ICommunicationObject
实现它?这将更符合该接口的体系结构意图,该接口为通信状态管理提供原语。