仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 935|回复: 11
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之不要在using语句中挪用WCF服务仓酷云

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
就安全性而言,net网页编程已经远远低于VB.NET,更无法与安全性著称的C#相比。假如你挪用WCF服务时,像上面的代码如许在using语句中举行挪用,必要注重一个成绩。
  1. using(CnblogsWcfClientclient=newCnblogsWcfClient()){client.Say("Hello,cnblogs.com!");}
复制代码
下面这段代码看上往没成绩,CnblogsWcfClient是一个主动天生的WCF客户端代办署理,承继自System.ServiceModel.ClientBase。using语句停止时,会挪用ClientBase完成的System.IDisposable.Dispose接口,实践就是挪用ClientBase的Close()办法。用.NETRefector翻开C:WindowsMicrosoft.NETFrameworkv4.0.30319System.ServiceModel.dll,能够看到如许的代码,见下图:

不但看上往没成绩,仿佛就是没成绩。可是...成绩就出在ClientBase.Close()上,Close()要封闭的是一个收集毗连,假如这时候收集毗连呈现成绩,不克不及一般封闭会激发非常(ClientBase的Close办法就是如许计划的,激发非常,而不是强迫封闭),成绩就来了。原本我们利用using的目标就是不论呈现甚么情况,即便天塌上去,也给我封闭失落;了局,关是关了,却没有闭,天仍是塌上去了。
大概我们能够用“不成顺从力”躲避这个成绩,但程序员的天分是办理成绩。代码中任何一个小成绩都不克不及无视,由于我们很难意料这个小成绩会不会带来年夜成绩。
那怎样办理这个成绩呢?MSDN中有谜底(往MSDN看看),代码以下:
  1. CnblogsWcfClientclient=newCnblogsWcfClient();try{client.Say("Hello,cnblogs.com!");client.Close();}catch(CommunicationExceptione){...client.Abort();}catch(TimeoutExceptione){...client.Abort();}catch(Exceptione){...client.Abort();throw;}
复制代码
下面的代码显得有些发抖,假如你不体贴是甚么非常,只需呈现非常就封闭的话,能够用上面的代码(代码来自TIP:ClosingyourWCFConnectionsproperly):
  1. CnblogsWcfClientclient=newCnblogsWcfClient();client.Say("Hello,cnblogs.com!");try{if(client.State!=System.ServiceModel.CommunicationState.Faulted){client.Close();}}catch(Exceptionex){client.Abort();}
复制代码
简化版代码:
  1. CnblogsWcfClientclient=newCnblogsWcfClient();client.Say("Hello,cnblogs.com!");try{client.Close();}catch{client.Abort();}
复制代码
好了,博客写好了,印象更深了,了解也更深了。在劳绩平分享,在分享中劳绩。

参考文章:
*AvoidingProblemswiththeUsingStatement
*ClosingyourWCFConnectionsproperly
相干链接:
WCF的成绩和Using语句块
WCF中的Dispose
你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)
只想知道 该用户已被删除
沙发
发表于 2015-1-18 17:11:36 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
海妖 该用户已被删除
板凳
发表于 2015-1-22 16:24:47 | 只看该作者
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
因胸联盟 该用户已被删除
地板
发表于 2015-1-25 12:56:24 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
再见西城 该用户已被删除
5#
发表于 2015-1-26 12:56:30 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-4 14:16:32 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
第二个灵魂 该用户已被删除
7#
发表于 2015-2-6 09:55:19 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
分手快乐 该用户已被删除
8#
发表于 2015-2-15 22:28:37 | 只看该作者
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
柔情似水 该用户已被删除
9#
发表于 2015-2-21 11:59:51 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
老尸 该用户已被删除
10#
发表于 2015-3-6 20:13:48 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
小魔女 该用户已被删除
11#
发表于 2015-3-7 22:38:49 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
再现理想 该用户已被删除
12#
发表于 2015-3-15 15:37:35 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表