Enterprise Services

一,使用Enterprise Services的场合

Enterprise Services是一种可伸缩的技术,使用组件加载均衡技术,就可以在不同的系统上分布客户的负载。组件加载均衡技术需要Microsoft Application Center Server,Microsoft Application Center Server的更多信息详见http://www.microsoft.com/applicationcenter.还可以在客户系统上使用Enterprise Services,因为该技术包含在Windows Xp中。

1,环境

Enterprise Services的基本功能是提供环境(context),该环境可以截取方法调用,在调用希望的方法之前执行某个服务功能。.net Remoting环境还在Enterprise Services中有重要的作用,因为这些环境用于截取用Enterprise Services配置的.net对象,但是,因为com组件可以与.net组件类似的方式在Enterprise Services中配置,所以com+环境与.net Remoting环境是共存的,这样,com组件和.net组件就可以参与同一个事务处理了。

2,自动事务处理

Enterprise Services最常用的特性是自动事务处理,使用这个特性,就不需要在代码中启动和执行事务处理了,而是可以把属性应用于一个类.使用[Transaction]属性和选项Required,Supported,RiquiresNew,NotSupported,就可以把一个类标记为需要有相关的事务处理,如果用选项Required标记属性,在方法开始时就会自动创建一个事务处理,并在事务处理的根组件完成时提交或停止事务处理。

在开发复杂的对象模式时,程序的这种声明方式与手工编写事务处理相比,具有特别的优势,例如:假定有一个Person对象,以及几个与Person对象相关的Address和Document对象,现在要把Person对象和所有的相关对象都存储在一个事务处理中,通过编程方式进行事务处理,就意味着把一个事务处理对象传送给所有相关的对象,使他们能参与同一个事务处理,明确使用事务处理,就不需要传送事务处理对象,因为这会通过环境在后台上进行。

3,分布式事务处理

Enterprise Services不仅提供了自动的事务处理,事务处理还可以分布在多个数据库中,Enterprise Services事务处理通过DTC来支持,DTC支持使用XA协议的数据库,XA协议是一种两阶段执行的协议,由SQL Server和Oracle支持,单个事务处理可以把数据写到SQL Server和Oracle数据库上。

分布式事务处理不仅对数据库有用,而且单个事务处理还可以把数据写到数据库和消息队列上,如果这两个操作中的一个失败,另一个操作就会回滚。

4,对象池

Enterprise Services提供对象池特性,这些服务使用线程池来回应客户的请求,对象池可以用于初始化时间比较长的对象,使用对象池后,对象就会提前创建,这样客户就不需要等待对象初始化了。

5,基于角色的安全性

使用基于角色的安全性,可以明确地定义角色,定义在什么角色中可以使用哪些方法或组件,系统管理员给用户或用户组赋予这些角色,在程序中,不需要处理访问控制列表,而可以使用只是简单字符串的角色。

6,排队的组件

排队的组件是消息队列的一个抽象层,客户机不是把消息传送给消息队列,而是通过一个记录器调用方法,该记录器提供的方法与在Enterprise Services中配置的.net类相同,该记录器在创建消息,通过消息队列把他们传送给服务器应用程序,如果客户应用程序运行在断开连接的环境下,或者发送给服务器的请求要在发送给另一个服务器之前的缓存,就可以使用排队的组件和消息队列。

7,松散耦合的事件

.net Remoting中使用事件,com环境中使用事件,通过这两个事件机制,客户和服务器之间就会建立一个牢固的连接,这与松散耦合的事件(LCE)不同,在LCE中,com+功能会插入客户和服务器之间,发布者会通过顶一个事件类,用com+来注册它提供的事件,发布者不是把事件直接发送给客户,而是把事件发送给用LCE服务注册的事件类,LCE服务会把事件转发给订阅者,订阅者是为事件注册了订阅的客户应用程序。

8,没有组件的服务

没有组件的服务是com+1.5的一个新功能,利用这个服务,可以在不需要配置组件的情况下创建环境,使用System.EnterpriseServices命名空间中的一些类,该环境可以在方法中创建,这种环境可以由一些事务处理要求,以自动处理由DTC管理的事务

二,事务处理

例如,在网上订购图书,图书订购进程会把客户要的书从仓库中取出,放在客户的订购框中,再从客户的信用卡收取购买图书的费用,这两个动作要么都成功完成,要么都不完成,这就是事务处理的作用。

事务处理有一些特殊的要求,例如事务处理必须有一个有效地状态,如果服务器断电了,也需要有有效地状态,事务处理的特性可以用术语ACID来定义。

1,ACID属性

Atomicity:表示一个工作单元,在事务处理中,要么整个工作单元都成功完成,要么都不完成。

Consistency:在执行事务处理后,数据库的状态必须有效,一致。

Isolation:表示并发进行的事务处理独立于状态的变化,在事务处理未完成时,事务处理A看不到事务处理B中已变化的状态。

Durability:在事务处理完成后,必须以可持久的方式存储起来,如果关闭电源或服务器崩溃,这些状态在重新启动时必须恢复。

2,事务处理的属性

服务组件可以用[Transaction]属性标记,以定义组件是否需要事务处理,以及如何进行事务处理

 

3,事务处理的结果

设置环境consistent和done位会影响事务处理,如果consistent位设置为true,就表示组件对事务处理的结果很满意,如果所有参与事务处理的组件都成功了,事务处理就完成了,如果consistent位设置为false,则组件对事务处理的结果不满意,在启动事务处理的根对象完成时,就会中止事务处理,如果设置了done位,就可以在方法调用完成后释放对象,用下一个方法调用创建新实例。

在.net中,还可以对方法应用属性[AutoComplete],来设置consistent和done位,而不是调用ContextUtil方法,使用这个属性,如果方法成功,就自动调用ContextUtil.SetComplete()方法,如果方法失败,并抛出一个异常,则通过属性[AutoComplete]调用ContextUtil.SetAbort()方法。

猜你喜欢

转载自blog.csdn.net/jinzhengquanqq/article/details/5876330