调用 WCF 服务的最佳实践 [重复]
Posted
技术标签:
【中文标题】调用 WCF 服务的最佳实践 [重复]【英文标题】:Best practice to call WCF Service [duplicate] 【发布时间】:2014-03-20 00:01:51 【问题描述】:我一直都知道从不像这样调用WCF服务时使用using语句
using (Service.YourClientProxy client = new Service.YourClientProxy())
var time = client.Time();
所以我一直用这个来调用Service
YourClientProxy clientProxy = new YourClientProxy();
try
.. use your service
clientProxy.Close();
catch(FaultException)
clientProxy.Abort();
catch(CommunicationException)
clientProxy.Abort();
catch (TimeoutException)
clientProxy.Abort();
我一直在阅读 och *** 并且我已经阅读了这篇文章 here Service.cs 类取自***
我想知道下面这是否是调用 WCF 服务的好习惯,这真的会关闭服务吗?
public static class Service<TChannel>
public static ChannelFactory<TChannel> ChannelFactory = new ChannelFactory<TChannel>("*");
public static TReturn Use<TReturn>(Func<TChannel, TReturn> codeBlock)
var proxy = (IClientChannel)ChannelFactory.CreateChannel();
var success = false;
try
var result = codeBlock((TChannel)proxy);
proxy.Close();
success = true;
return result;
finally
if (!success)
proxy.Abort();
像这样从客户端调用服务。
var time = Service<Service.YourServiceChannel>.Use(resultAsync =>
return resultAsync.TimeAsync();
);
【问题讨论】:
我做了一个参考并阅读了那篇文章,我不清楚什么是最佳实践。我还问我所指的代码示例是否真的关闭了连接。 【参考方案1】:来自这篇文章:
http://msdn.microsoft.com/en-us/library/aa355056(v=vs.110).aspx
似乎最好的做法是通过在 try 块中调用 Close 来调用 Dispose:
try
client.Close();
catch (CommunicationException e)
client.Abort();
catch (TimeoutException e)
client.Abort();
catch (Exception e)
client.Abort();
throw;
您还可以在每个 catch
块中添加日志记录或其他任何内容。
【讨论】:
-1:你的Dispose
呢?这个问题是重复的。
这里调用 Close() 和调用 Dispose() 不是一回事吗?
差不多,在这种情况下,您的答案应该是“Close
”而不是“Dispose
”。以上是关于调用 WCF 服务的最佳实践 [重复]的主要内容,如果未能解决你的问题,请参考以下文章