设为首页 收藏本站
查看: 738|回复: 0

[经验分享] microsoft中COM+事务和IIS

[复制链接]

尚未签到

发表于 2017-2-12 08:53:38 | 显示全部楼层 |阅读模式
  microsoft已经紧密地集成了iis和com+的功能,这使我们能非常容易地在事务性web页面编程中利用事务处理应用程序。有许多不同方式集成com+和iis的事务特性,这些例子包括:
1. 事务性asp。
2.asp 中的objectcontext。
3.事务性事件。
开发者可以在使用iis和com+的应用程序中使用一个或多个这些特性。因为它们是紧密集成的,开发者只进行少量的工作,就能充分利用这些服务。事实上,在com+ 中objectcontext封装了一个事务,可以直接用于事务中的asp页面。
19.4.1 事务性asp
由于iis 4.0和mts的集成,开发者可以在一个事务中包含asp脚本。这些asp网页可以包含对服务器组件的调用,这些组件也将参与相同的事务。同所有的事务一样,如果事务的任一部分失败,将回滚整个事务。事务性asp脚本所增加的优点就是使得把多个组件绑定到单个事务中变得简单化。
当处理一个终止的事务时,使用事务性脚本有一个问题。通过数据库的资源管理器访问数据库产生的改变将被自动地回滚,然而, com+不能回滚脚本自身产生的变化。例如,使用脚本产生的任何变化,如对session或application变量的改变,将不会自动地回滚。以后你将看到如何使用事务性事件通知事务已经终止。当处理这个事件时,能手工地回滚com+不能自动回滚的变化。这种限制的原因是com+事务只能回滚与ms dtc相容的服务产生的变化。
在iis 5.0中有一个新特性。开发者具有使得一个事务跨越多个asp脚本网页的能力。这归功于在server对象上新增的execute和transfer方法。
然而,正常情况下,单个事务的所有处理可以在单个asp网页中完成。例如,如果一个应用程序有一个组件从一个帐户中提款,而另一个组件在一个帐户中存款。为了把资金从一个帐户转到另一个帐户,创建asp脚本,利用提款组件从帐户中取出资金,使用存款组件把资金存入新的帐户。将所有这些功能放入一个事务性asp网页中,如果事务过程的任一部分失败,就回滚所有的变化,帐户余额回到其初始值。
为声明一个网页是事务性的,使用下列指令:

  对transaction指令可能的设置有:
? disabled:告诉com+不希望在事务中涉及组件。
? requires_new:即使已存在一个事务,也启动一个新的事务。
? required:如果不存在事务就启动一个新的,如果存在就参与到其中。
? supported:不启动一个事务,但是如果事务已经存在就参与它。
? not_supported:即使存在事务,也不参与事务。
这些值与使用组件服务浏览器为每个组件设置的transaction support属性的作用相同。
transaction指令必须处在asp页面脚本的第一行,通常由language指令包含。如果这之前在页面中有任何内容,将产生脚本错误。如同组件中的事务一样,如果到达代码的最后一行,还没有提交或终止,则com+假定提交,并把变化写入磁盘。另外,由页面调用的每个对象能够使用同一asp页面的objectcontext对象参与事务,通常就是这么做的。
19.4.2 事务性asp中的objectcontext对象
当编写一个事务性asp脚本时,你可能想直接影响脚本的事务的结果。像为事务编写的组件一样,asp页也能利用objectcontext对象。自从发表了asp 2.0以后,就可以利用这个对象,它为开发者需要的所有事务处理例程提供功能。服务器组件参与事务时访问的就是这个对象,它包含setabort和setcomplete方法。
下列代码显示了在一个事务性web页中如何实例化两个com对象和一个事务,并在这两个对象上调用一个方法。
注意,页面顶部的事务设置表明请求一个事务。正是该设置使该页面像com组件一样参与同一事务。事实上,只要com组件的transaction support属性为required或supported,它们就变成由asp页启动的事务的一部分。

  随着asp页执行,调用每个com类的一个方法。当执行每个方法时,其返回值用于决定处理是否成功。如果任一方法返回一个非零值, asp页务。否则, asp页将提交事务并将变化存入磁盘。
这个例子的要点是所有的方法调用随着asp页面一调用objectcontext对象中的setabort方法,回滚事起进入到同一事务中。
上述的例子还可以改写,使得com组件中的方法从内部调用setcomplete和setabort方法。这将从asp页中删除一些逻辑,并嵌入到com组件中。用这种方式编写事务的唯一问题是asp页不知道将要提交还是终止事务。然而,这可以通过实现事务事件来解决。
19.4.3 事务事件
asp页也具有侦听com+的能力,可以了解事务何时将提交或终止。这是通过在com+提交或终止事务前iis调用两个例程来实现的。这两个方法称为o transaction commit和on transactionabort。
ontransactioncommit方法在com+提交事务之前、准备阶段之后被触发。只要事务中没有任何部分终止,将触发ontransactioncommit例程(事件),提交事务。如果事务被终止,则触发ontransactionabort事件:

  同大多数事务性asp页一样,上述例子的开始外声明它要求一个事务,接下来脚本调用一个事务性com对象的方法。一旦完成该页, com+将通过检查是否有事务的某一部分调用了setabort方法来决定事务的结果。如果没有调用setabort方法,就触发ontransactioncommit事件,并且提交该事务;如果调用了setabort方法,则触发ontransactionabort事件,回滚事务。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-340898-1-1.html 上篇帖子: Office2K对IIS的意外影响(下) 下篇帖子: 将Resin集成到IIS中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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