用C# 开发COM+ 组件

    技术2022-05-12  11

      在.Net 中,我们可以用C# 开发组件,并把组件部署为COM+组件。这样的话,我们的组件就可以利用COM+提供的各种服务,如自动的事务管理、对象池。

    利用C#开发COM+组件,我们应该遵循如下步骤:

          1.创建一个类,此类必须继承于ServicedComponent 类

           2.给此类或类的方法添加属性来请求COM+ 服务。

              如,若我们需要为某个组件请求对象池服务 则可以为此类添加ObjectPoolingAttribute 

               e.g.

             

    [ObjectPooling(Enabled = true , MinPoolSize = 1 , MaxPoolSize = 10 ,    CreationTimeout = 25000 )] public   class  MyPooledObject : ServicedComponent {}

       

           3.为整个程序集添加属性来指定COM+应用程序的配置。通常情况下,我们至少应指定 ApplicationNameAttribute和ApplicationActivation 属性。

                3.1 ApplicationNameAttribute

                      通过此属性,我们可以为此COM+程序赋一个COM+程序名。

                 3.2 ApplicationActivationAttribute

                     可以利用此属性为COM+程序指定激活方式。可以指定Server,Library两种激活方式。

             4.将此程序集变为强命名的程序集

                     e.g. [Assembly:AssemblyKeyFile("Key.snk")]     Key.snk  由sn 工具生成,并应置于应用程序夹下

            

             5. 将ComVisible 属性设为true

                      为了将组件部署为COM+组件,我们的组件应该是COM可见的 ,在AssemblyInfo.cs 中,我们将ComVisible设置为true    如 : [assembly:ComVisible(true)]

              6. 注册组件

                    在开发完组件之后,我们还必须将此组件注册到COM+之中。

                    6.1 手动注册

                      使用RegSvcs 工具  如: RegSvcs nick.dll

                     6.2 动态注册

                      我们只需把包含组件的程序集拷贝至应用程序文件夹,当第一个程序请求此组件的时候,CLR会自动注册此组件。

         缺点: 此时调用组件的客户端必须是由托管代码编写的。如果此组件也被COM 组件使用的话,我们应该手动注册此组件。同时由于是动态注册,我们不能在组件被使用之前在组件服务工具中配置他的安全设置(因为此时组件还未注册),默认情况下,所有的请求都会被拒绝,所以我们可以 利用 SecurityRoleAttribute 来添加角色,使组件可以被指定角色访问。

                   如: [assembly:SecurityRole("Nick",SetEveryOne=true)] 此语句在此COM+ 程序中添加了名为Nick 的角色,并指定所有的人都属于此角色。


    最新回复(0)