在.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 的角色,并指定所有的人都属于此角色。
