iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >为什么不要在using语句中调用WCF服务
  • 377
分享到

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

2023-06-17 13:06:47 377人浏览 独家记忆
摘要

这篇文章主要介绍为什么不要在using语句中调用WCF服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。using (C

这篇文章主要介绍为什么不要在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,可以看到这样的代码,见下图:

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

不仅看上去没问题,似乎就是没问题。但是...问题就出在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服务”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 为什么不要在using语句中调用WCF服务

本文链接: https://www.lsjlt.com/news/289490.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么不要在using语句中调用WCF服务
    这篇文章主要介绍为什么不要在using语句中调用WCF服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。using (C...
    99+
    2023-06-17
  • 为什么不需要在JavaScript使用switch 语句!
    本篇文章为大家展示了为什么不需要在JavaScript使用switch 语句!,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。没有 switch 就没有复杂的代码块s...
    99+
    2024-04-02
  • 为什么switch case语句在java中需要加入break
    本篇文章为大家展示了为什么switch case语句在java中需要加入break,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java 中使用switch case语句需要加入break 做了具体...
    99+
    2023-05-31
    java switch case
  • 为什么不使用If-Else语句
    本篇内容主要讲解“为什么不使用If-Else语句”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么不使用If-Else语句”吧!If-Else语句我们再熟悉不...
    99+
    2024-04-02
  • 为什么super(…)和this(…)调用语句不能同时在一个构造器中出现
    构造函数必须出现在第一行上。所以,注定了你只能调用一个构造函数。默认的,父类的或者本类的其它构造,你自己选一个。...
    99+
    2023-06-03
  • 为什么不要PySnoope中使用print进行调试
    为什么不要PySnoope中使用print进行调试?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。PySnooper 是一个非常方便的调试器。如果您正在试图弄清楚为什么您的Pyt...
    99+
    2023-06-06
  • 为什么代码规范要求SQL语句不要过多的join
    送分题 面试官:有操作过Linux吗? 我:有的呀 面试官:我想查看内存的使用情况该用什么命令 我:free 或者 top 面试官:那你说一下用free命令都可以看到啥信息 ...
    99+
    2024-04-02
  • 为什么super(…)或this(…)调用语句只能作为构造函数中的第一句出现?
    class A {     A()      {      System.out.println("You...
    99+
    2023-06-03
  • Go语言中为什么要有GMP调度模型
    今天小编给大家分享一下Go语言中为什么要有GMP调度模型的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。GMP调度模型是Go的...
    99+
    2023-07-06
  • 为什么永远不要在MySQL中使用UTF-8
    这篇文章给大家介绍为什么永远不要在MySQL中使用UTF-8,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后...
    99+
    2023-06-19
  • 为什么不要在 Flutter 中使用全局变量
    目录前言Flutter 中的全局变量是什么?Flutter 中使用全局变量的缺点1. 复杂的代码维护过程2. 全局变量使单元测试变得痛苦3. 全局变量导致“面条&rdqu...
    99+
    2024-04-02
  • 在Activity中为什么要用managedQuery()
    在Activity中使用managedQuery()方法是为了在Android 3.0(API级别11)之前的版本中访问Conten...
    99+
    2023-09-01
    Activity
  • User这个词为什么不要在代码中使用
    今天给大家介绍一下User这个词为什么不要在代码中使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时...
    99+
    2023-06-28
  • 为什么要在NumPy框架中使用Go语言对象?
    NumPy是一个广泛使用的Python科学计算库,它提供了一种方便的方式来处理大量的数学和科学计算任务。然而,对于一些特殊的应用场景,Python的解释性语言特性和GIL的限制可能会成为性能瓶颈。这时,使用Go语言对象可以帮助我们充分利用...
    99+
    2023-08-21
    对象 numpy 框架
  • 为什么要在Ruby APP中使用Neo4j
    为什么要在Ruby APP中使用Neo4j,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。每天,我都需要储存大量的数据,而我可以使用很多工具,比如 Postgre...
    99+
    2023-06-17
  • 香港服务器为什么不要备案
    香港服务器不需要备案的原因是:香港法律制度与国内法律制度是不同的,在香港没有规定网站必需备案才可以访问,但使用香港服务器放置侵权、赌博、钓鱼网站等一切违规及法律禁止的内容也是不允许的。具体内容如下:按照工信部的相关规定,网站备案是指网站接入...
    99+
    2024-04-02
  • 为什么要用云服务器
    要用云服务器的原因:1、云服务器配置弹性灵活,能够快速添加或删减配置,可以避免造成资源浪费以及降低了运营成本;2、云服务器性能优势强,能够不断升级最新技术以及更新硬件配置来提高服务器性能;3、云服务器使用成本较低,有效降低企业建站投入的成本...
    99+
    2024-04-02
  • 为什么不要用Java的语法思维来写Kotlin
    这篇文章主要讲解了“为什么不要用Java的语法思维来写Kotlin”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么不要用Java的语法思维来写Kotlin”吧!1.尽可能的少用 !!个人...
    99+
    2023-06-17
  • 为什么在 defer 语句中关闭通道会出现恐慌?
    “纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《为什么在 defer 语句中关闭通道会出现恐慌?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Gola...
    99+
    2024-04-05
  • 在mysql中创建数据库用什么语句
    mysql 中创建数据库的语句是 create database。语法:create database database_name,其中 database_name 为要创建的数据库名称...
    99+
    2024-04-05
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作