不帅 发表于 2015-1-18 11:26:11

ASP.NET网站制作之WCF的成绩和Using语句块仓酷云

你觉得数据库怎么样?WCF客户端不克不及用在Using语句块中,由于它大概会抛出不成预知的非常。即便你捕捉了非常,仍有大概一向坚持毗连。让我们来看看构成这一成绩的汗青缘故原由,并提出几个弥补措施。
在.NET中,资本办理的基本就是IDisposable和Using语句块。除CLR对象,.NET中统统对象均利用这些工具举行办理。因而,我们必要晓得为什么微软关于WCF框架的资本办理云云束手无策。
WCF客户真个主要成绩是Close/Dispose办法会抛出非常。这与框架计划指南和IDisposable规约南辕北辙,从而招致Dispose办法能够在Finally语句块中被不平安的挪用。
更糟的是,只需不挪用Abort,Close/Dispose办法就会一向坚持毗连。太多的毗连翻开就会带来功能的成绩,使用程序也会变得不敷不乱。
在旧事组中,有关此成绩的会商能够追溯到2006年,BrianMcNamara先容了这一计划缺点的幕后故事。
ICommunicationObject(它是ServiceHost,ClientBase,IChannel,IChannelFactory与IChannelListener终极承继的对象)老是具有封闭对象的两个办法:(a)Close,(b)Abort。依照字面的了解,假如但愿自动封闭对象,则挪用Close;若要强迫封闭则挪用Abort。
因而,Close()办法会吸收一个Timeout参数,并包含一个异步版本(由于它大概堵塞线程),并且Close()还会抛出非常。Close抛出的非常为CommunicationException(CommunicationObjectFaultedException是其子类)与TimeoutException。
相反,Abort()其实不会堵塞线程(也不会抛出任何非常),因而没有Timeout值,也其实不包括异步版本。
这两个观点从最后的Indigo一向相沿至今[译注:所谓至今是指Brian宣布帖子的工夫2006年10月25日]。就今朝而言统统一般。
最后的界说为ICommunicationObject:IDisposalbe。作为一个标志接口,我们以为它能够用于关照用户在大概的时分马上开释对象。但是成绩却相继而来。
从Beta1版本入手下手,我们修正了Dispose(),让其同等于Abort()办法。一部分缘故原由是Dispose()应当完成最最少的需要的对象清算事情。在Beta1中,这大概算得上是我们的头号贫苦了。用户能够将它们的通道(channel)对象放在using()语句块中,缓存中任多么待被掏出的动静都大概会丧失。事件没法提交,会话大概失掉告诉收到(ACKed)的动静等。
鉴于用户的反应,在Beta2中我们又修正了完成,让Dispose()近似即是Close()。我们晓得,非常的抛出是成绩之地点(部分缘故原由在这篇帖子中已申明),因而我们试图让Dispose变得加倍“伶俐”。那就是说,假如以后并不是Opened形态,就会在外部挪用Abort()。这仍旧存在一系列成绩,最次要的是你没法从牢靠性角度揣度体系。Dispose仍旧会抛出非常,但并不是老是会关照你某些事变产生毛病。终极,我们决意将IDisposable从ICommunicationObject中移走。经由几番狡辩,IDisposable在ServiceHost和ClientBase中被保存了下来,由于从实际上讲,关于多半用户而言Dispose抛出非常仍旧是能够承受的,他们更倾向于利用using()的便当性,具有该标志接口就能够更实时地扫除对象。你大概主意(我们的一部分隔发职员抱有一样的立场):应当将它从这两个类中移走,但是好也罢歹也罢,我们毕竟作出了选择。关于这个成绩,你永久都不成能告竣分歧,因而我们在SDK样例中给出了最好理论,那就是遵守try{Close}/catch{Abort}范式。
弥补措施
SteveSmith提出了CloseConnection扩大办法[译注:原文并没有给出CloseConnection扩大办法的帖子,你能够会见IDisposable与WCF]。在Finally语句块中能够挪用该办法,而不是挪用Close,它封装了Close/Abort逻辑。
旧事组的发帖人bog1978倡议利用C#lambda以撑持创立相似Using的布局。办法吸收一个新的客户端对象,和一个匿名办法,该办法持有的代码与一般利用using语句块包括的代码完整不异。
最初,另有一个弥补措施是ErwynVanDerMeer界说的WCF服务代办署理帮助类。用户能够创立它,而不是一般的代办署理类,它能够改正在封闭毗连时呈现的成绩。一旦创立,它就会主动构建实践的代办署理,然后经由过程只读属性表露它。
检察英文原文:TheProblemswithWCFandtheUsingBlock
有时也搞不懂应该学那种;主要看你以后去的那个公司是使用哪种了。就像王千祥的课上说的:企业应用现在主要就三层(其实也差不多就是MVC):表示层(主要使用html写的,很简单)、业务逻辑层(主要就是应用服务器的)。最后就是数据层(其实就是学习数据库)

灵魂腐蚀 发表于 2015-1-21 06:21:09

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

愤怒的大鸟 发表于 2015-1-25 23:19:01

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

老尸 发表于 2015-1-28 10:44:58

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

深爱那片海 发表于 2015-2-4 20:33:47

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

小魔女 发表于 2015-2-15 22:45:38

asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源

仓酷云 发表于 2015-3-2 23:42:11

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

精灵巫婆 发表于 2015-3-6 00:01:05

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

飘灵儿 发表于 2015-3-12 16:38:51

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

金色的骷髅 发表于 2015-3-12 16:38:51

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

爱飞 发表于 2015-3-20 00:23:07

可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。

只想知道 发表于 2015-4-5 12:27:16

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
页: [1]
查看完整版本: ASP.NET网站制作之WCF的成绩和Using语句块仓酷云