ASP.NET网站制作之不要在using语句中挪用WCF服务仓酷云
就安全性而言,net网页编程已经远远低于VB.NET,更无法与安全性著称的C#相比。假如你挪用WCF服务时,像上面的代码如许在using语句中举行挪用,必要注重一个成绩。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看看),代码以下:
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):
CnblogsWcfClientclient=newCnblogsWcfClient();client.Say("Hello,cnblogs.com!");try{if(client.State!=System.ServiceModel.CommunicationState.Faulted){client.Close();}}catch(Exceptionex){client.Abort();}简化版代码:
CnblogsWcfClientclient=newCnblogsWcfClient();client.Say("Hello,cnblogs.com!");try{client.Close();}catch{client.Abort();}好了,博客写好了,印象更深了,了解也更深了。在劳绩平分享,在分享中劳绩。
参考文章:
*AvoidingProblemswiththeUsingStatement
*ClosingyourWCFConnectionsproperly
相干链接:
WCF的成绩和Using语句块
WCF中的Dispose
你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:) 对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 我的意思是.net好用,从功能上来说比JAVA强还是很明显的。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
页:
[1]