千家信息网

为什么不要在using语句中调用WCF服务

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍为什么不要在using语句中调用WCF服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要
千家信息网最后更新 2026年11月01日为什么不要在using语句中调用WCF服务

这篇文章主要介绍为什么不要在using语句中调用WCF服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。

using (CnblogsWcfClient client = new CnblogsWcfClient())  {      client.Say("Hello, cnblogs.com!");  }

上面这段代码看上去没问题,CnblogsWcfClient是一个自动生成的WCF客户端代理,继承自System.ServiceModel.ClientBase。using语句结束时,会调用ClientBase实现的System.IDisposable.Dispose接口,实际就是调用ClientBase的Close()方法。用.NET Refector打开C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.ServiceModel.dll,可以看到这样的代码,见下图:

不仅看上去没问题,似乎就是没问题。但是...问题就出在ClientBase.Close()上,Close()要关闭的是一个网络连接,如果这时网络连接出现问题,不能正常关闭会引发异常(ClientBase的Close方法就是这样设计的,引发异常,而不是强制关闭),问题就来了。本来我们使用using的目的就是不管出现什么状况,即使天塌下来,也给我关闭掉;结果,关是关了,却没有闭,天还是塌下来了。

也许我们可以用"不可抗拒力"回避这个问题,但程序员的天性是解决问题。代码中任何一个小问题都不能忽视,因为我们很难预料这个小问题会不会带来大问题。

那如何解决这个问题呢?MSDN中有答案(去MSDN看看),代码如下:

CnblogsWcfClient client = new CnblogsWcfClient();  try{      client.Say("Hello, cnblogs.com!");     client.Close();  }   catch (CommunicationException e)  {      ...      client.Abort();}catch (TimeoutException e)  {      ...      client.Abort();}catch (Exception e)  {       ...      client.Abort();      throw;  }

上面的代码显得有些哆嗦,如果你不关心是什么异常,只要出现异常就关闭的话,可以用下面的代码(代码来自TIP: Closing your WCF Connections properly):

CnblogsWcfClient client = new CnblogsWcfClient();  client.Say("Hello, cnblogs.com!");  try{     if   (client.State != System.ServiceModel.CommunicationState.Faulted)     {        client.Close();     }  }  catch   (Exception ex)  {     client.Abort();  }

简化版代码:

CnblogsWcfClient client = new CnblogsWcfClient();  client.Say("Hello, cnblogs.com!");  try{      client.Close();  }  catch{      client.Abort();  }

以上是"为什么不要在using语句中调用WCF服务"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

问题 代码 语句 就是 服务 面的 内容 方法 篇文章 网络 下图 价值 兴趣 天性 实际 客户 客户端 小伙 小伙伴 接口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 为想互联网科技怎么样 互联网科技官网 美国互联网保险保险科技 河南真二互联网科技有限公司 朗新科技与工业互联网 互联网 科技 华中科技大学互联网 科技与互联网的利与弊 常德市电业局互联网科技部 互联网科技有哪些公司 彤创互联网科技有限公司 互联网行业科技股 卓翼科技产业互联网合作 科技赋能视角下互联网保险发展 小米互联网科技园入驻 宇信科技在杭州互联网排第几 从那以后互联网科技有限公司 半导体是互联网高科技吗 东营紫格互联网科技 西安纸贵互联网科技有限公司 联恩商钥互联网科技有限公司 互联网汽车科技小镇 青岛科技大学互联网大赛研究生 成都互联网科技公司工作好不好 电子科技大学互联网创业大赛 怎样加入科技互联网 福州德业互联网科技 唯美互联网科技 云南互联网科技学费
0