COM+的使用(转)

服务组件是用符合   CLS   的语言创作的类,该类直接或间接从   System.EnterpriseServices.ServicedComponent   类派生。以此方式配置的类可以在   COM+   应用程序中承载,并且可以通过   EnterpriseServices   命名空间使用   COM+   服务。有关受支持的服务列表,请参见可用的   COM+   服务摘要。 

COM+   服务(例如自动事务处理或排队组件)都是可以声明方式配置的。在设计时应用与服务相关的属性,并创建使用这些服务的类的实例。配置某些服务的途径是在与服务相关的类或接口上调用方法。某些服务可以从一个对象流到另一个对象。例如,配置为要求事务的对象可以在第二个对象也支持或要求事务的情况下,将事务扩展到第二个对象。 

COM+   目录中包含配置信息,可以将该配置信息应用于类的实现。在运行时,COM+   会根据您为代码提供的属性来创建上下文服务层。下面的插图显示了在   COM+   承载的两个托管对象之间流动的自动事务处理。 


创建服务组件   

定义直接或间接从   ServicedComponent   类派生的类。例如,下面的代码确保   Account   类由   COM+   应用程序承载。   
[Visual   Basic] 
Imports   System.EnterpriseServices 
Public   Class   Account   
Inherits   ServicedComponent 
Shared   Sub   Main() 
End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
public   class   Account   :   ServicedComponent 

      static   void   Main() 
      {} 


下面的代码将服务属性应用于程序集、类或方法。   
[Visual   Basic] 
Imports   System.EnterpriseServices 
<Transaction(TransactionOption.Required)>   Public   Class   Account   
Inherits   ServicedComponent 
      <AutoComplete()>   Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[Transaction(TransactionOption.Required)] 
public   class   Account   :   ServicedComponent 

      [AutoComplete] 
      static   void   Main()   
{} 


注意       在   .NET   Framework   1.1   版中,如果程序集中不存在   ApplicationAccessControlAttribute   属性,则默认情况下启用   COM+   安全配置。此行为与   .NET   Framework   1.0   版中的不同。 
可按如下所示编译该示例:   
Makefile.bat   

[Visual   Basic] 
vbc   /t:exe   /r:System.EnterpriseServices.dll   Demo.vb 

[C#] 
csc   /t:exe   /r:System.EnterpriseServices.dll   Demo.cs 

通过动态或手动注册服务组件应用程序的程序集,来部署服务组件应用程序。有关更多信息,请参见动态注册和手动注册。   
服务组件注册之后,客户端可以按照它们创建任何其他组件实例的方式来创建组件的实例。有关完整示例,请参见   Serviced   组件示例。 

注意       在   Windows   2000   平台上,COM+   总是为您创建的组件加载最新版本的公共语言运行库。这意味着在同时安装有   .NET   Framework   1.0   版和   .NET   Framework   1.1   版的计算机上,总是加载   .NET   Framework   1.1   版。为解决此问题,可以创建   COM+   dllhost.exe   配置文件,它能将所有应用程序“锁定”到特定的   .NET   Framework   版本。在   Windows   XP   和   Windows   Server   2003   平台上,可以使用“应用程序根目录”设置将   COM+   指向相应的配置文件目录。 


服务组件由   COM+   应用程序承载,且必须对该应用程序是可访问的。为了便于访问,服务组件有下面的注册和配置要求:   

程序集必须具有强名称。有关其他信息,请参见使用强名称为程序集签名。   
程序集必须在   Windows   注册表中注册。   
类型库定义必须注册并安装到特定的   COM+   应用程序中。   
以编程方式添加的服务必须在   COM+   目录中配置。   
对于服务组件有用的注册信息包括如下内容:   

COM+   应用程序标识   
激活类型   
说明信息   
COM+   应用程序标识 
可以通过名称或   GUID   标识现有的   COM+   目标应用程序。.NET   服务安装工具   (Regsvcs.exe)   提供   /appname:   选项,用于指定应用程序名。下面的示例说明如何使用程序集级的   ApplicationName   属性提供应用程序名。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<assembly:   ApplicationName( "BankComponent ")> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   ApplicationName( "BankComponent ")] 
public   class   Account   :   ServicedComponent 

      static   void   Main()   
{} 


如果将   ApplicationID   属性(或   Guid   属性)应用到程序集,如下面的示例所示,则所有针对应用程序的搜索都基于该   GUID,而不基于应用程序名。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<assembly:   ApplicationName( "BankComponent ")> 
<   assembly:   ApplicationID( "4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c ")> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   ApplicationName( "BankComponent ")] 
[   assembly:   ApplicationID( "4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c ")]   
public   class   Account   :   ServicedComponent 

      static   void   Main()   {} 


注意       对于动态注册,指定目标应用程序的唯一方式是通过在设计时应用   ApplicationNameAttribute、ApplicationIDAttribute   或   GuidAttribute   属性。.NET   安装工具   (Regsvcs.exe)   提供   /appname:   开关,以在编译时指定应用程序名或   GUID。Regsvcs.exe   还提供   /parname:   开关来标识特定的   COM+   分区。COM+   分区服务仅在   Windows   Server   2003   平台上可用。 
如果目标应用程序未被识别或未找到,那么注册机制就会使用程序集的全名而不是版本号来创建应用程序。 

警告       不要在   COM+   分区服务中使用   ApplicationIDAttribute   属性。如果使用   COM+   分区服务,应用   ApplicationIDAttribute   属性会防碍分区配置。COM+   分区服务仅在   Windows   Server   2003   平台上可用。 
激活类型 
激活类型确定服务组件是在调用方的进程(库)中还是在新进程(服务器)中创建的。可以应用   ApplicationActivationAttribute   属性来指定激活类型。 

注意       如果   ApplicationActivationAttribute   属性设置为   Server,则在可以使用服务器应用程序之前,必须用   Windows   安装程序将程序集及其所依赖的所有程序集添加到全局程序集缓存   (GAC)   中;否则,应用程序将产生异常。此外,如果   ApplicationActivationAttribute   属性设置为   Server,则服务组件的任何参数都必须标记为   Serializable,或者必须从   MarshalByRefObject   类派生。否则,应用程序将产生异常。 
下面的示例说明如何将激活类型设置为“server”。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<   assembly:   ApplicationActivation(ActivationOption.Server)> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   ApplicationActivation(ActivationOption.Server)]   
public   class   Account   :   ServicedComponent 

      static   void   Main()   {} 


说明信息 
说明是可选的,但有时对于区分类似的程序集很有用。下面的示例说明如何应用   DescriptionAttribute   属性以设置有关程序集的说明。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<   assembly:   Description( "BankComponent   assembly ")> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   Description( "BankComponent   assembly ")]   
public   class   Account   :   ServicedComponent 

      static   void   Main()   
{} 

posted on 2010-07-27 14:21  小呆也行  阅读(451)  评论(0编辑  收藏  举报

导航