WCF 服务代理 - 调用 Close() 和 Abort 函数
Posted
技术标签:
【中文标题】WCF 服务代理 - 调用 Close() 和 Abort 函数【英文标题】:WCF Service proxy - Both Close() and Abort functions getting called 【发布时间】:2016-08-30 20:01:23 【问题描述】:我有以下代码来调用 WCF 代理:-
var client = new ServiceClientProxy();
try
var documents = client.GetDocuments();
client.Close();
if(documents.Length > 50)
throw new Exception("Too many Documents");
else if(documents.Length <10)
throw new Exception("Too many Documents");
else
return documents;
catch(exception ex)
client.Abort();
这里如果我们从服务中获得的文档数量超过 50 或少于 10,在这种情况下,我们将同时调用 Close() 以及客户端上的 Abort 函数。这是调用 WCF 服务的预期方式吗代理? 任何人都请建议是否有更好的方法来处理这个问题。
在调用后立即关闭客户端连接是更好的方法,还是我们需要等到我们完全使用响应属性并在结束时关闭连接?
【问题讨论】:
这篇文章可能对你有所帮助。 relentlessdevelopment.wordpress.com/2010/01/17/… 你能修正缩进吗? 感谢 vercin。链接中的文章有关于如何关闭 wcf 的信息。但我的问题是,如果代码本身抛出异常,那么在关闭函数后会调用中止函数。是否这会导致什么问题吗? 【参考方案1】:这也是关闭客户端连接的更好方法吗 通话后立即还是我们需要等到我们有 完全使用响应属性并关闭连接 结束了吗?
取决于您是否需要对服务进行后续调用。如果没有,那么请关闭连接。
这是调用 WCF 服务代理的预期方式吗?请任何人 建议是否有更好的方法来处理这个问题。
没有。要处理嵌入到 WCF 中的问题,您实际上应该采用如下结构:
Documents documnts = null;
try
var client = new ServiceClientProxy();
documents = client.GetDocuments();
finally
try
if (client.State != CommunicationState.Closed)
client.Close();
catch
client.Abort();
;
;
if (documents.Length > 50)
throw new Exception("Too many Documents");
else if (documents.Length < 10)
throw new Exception("Too many Documents");
else
return documents;
如果您想真正了解“为什么”,我强烈建议您阅读本系列文章。他们将清除您问题的关闭/中止部分。
http://blogs.msmvps.com/p3net/2014/02/02/a-smarter-wcf-service-client-part-1/
http://blogs.msmvps.com/p3net/2014/02/09/a-smarter-wcf-service-client-part-2/
http://blogs.msmvps.com/p3net/2014/02/23/a-smarter-wcf-service-client-part-3/
http://blogs.msmvps.com/p3net/2014/03/15/a-smarter-wcf-service-client-part-4/
我应该在您提供的代码中指出的另一件事是异常应该是异常的。
在我认为是业务逻辑的情况下使用异常通常不是正确的做法。请考虑返回结构化结果的方法。也许在你的情况下它是有道理的。
HTH
【讨论】:
非常感谢斯蒂芬。我还有一个疑问。如果我们先在一个客户端上调用 close 然后在同一个客户端上调用 abort,我们会得到任何异常或错误吗? 你有运行代码,所以我认为没有什么能阻止你尝试它。以上是关于WCF 服务代理 - 调用 Close() 和 Abort 函数的主要内容,如果未能解决你的问题,请参考以下文章