UML软件工程组织

如何在.NET中创建服务型组件(1)
作者:张劲松 本文选自:赛迪网 2002年12月03日

 

对于在WINDOWS上作过一些开发的程序员来说,COM+应该是不会感到陌生的吧。COM+代表了Microsoft在COM技术平台上的最高水平,也是Microsoft藉以和J2EE抗衡的支点(J2EE里的核心思想其实也从COM+的前身MTS中借鉴了许多)。事实上,COM+确实是非常出色的产品,对于中等难度的项目,用VB6加COM+的确是一个非常快速高效的技术组合。更值得一提的是COM+是完全免费的。只要你拥有了WINDIWS 2000或是XP。

在.NET推出后,人们似乎忘记了COM+。但如果你留心一下Microsoft技术发展的动向,你就不难发现在今后一到两年内,COM+不会退出WINDOWS舞台。它的许多服务功能还是.NET在短时间内无法替代的。比如说,COM+提供的实例管理(Instance management),交易处理(Transactions),断开连接的异步队列组件(Disconnected asynchronous queued components),基于角色的安全机制(Role-based securiry)等等。所以在今后一段时间内将是新旧技术结合,COM逐渐向.NET过渡的情形。在这种大的技术背景下,学习如何用.NET来编写在COM+中运行的组件还是非常有意义的。

本文将结合一个小的例程向大家描述一下开发SERVICED COMPONENTS的基本流程、技术要点以及实际开发工作中应遵循的一些基本原则。


SERVICED COMPONENT简介


SERVICED COMPONENT是指用任何和.NET CLS相兼容的程序语言开发的类。它必须直接或间接的派生于System.EnterpriseService.ServicedComponent这一基类。这样开发的类可以在COM+的环境中运行,调用COM+的服务。在.NET开发环境里,可供调用的COM+服务有

· Automatic Transaction Processing )(自动交易处理)

· COM Transaction Integrator (COMTI) (COM交易集成)

· Compensating Resource Managers (CRMs) (补偿性资源管理者)

· Just-In-Time Activation(即时激活)

· Loosely Coupled Events(松散连接事件)

· Object Construction (对象创建)

· Object Pooling(对象循环)

· Queued Components(队列组件)

· Role-Based Security(基于角色的安全)

· Shared Properties(共享的属性)

· Synchronization (Activity) (同步)

· XA Interoperability (XA的互操作)


SERVICED COMPONENT的开发流程


创建类库文件(Class Libray)

如例程所示,用户编写的类它必须直接或间接的派生于ServicedComponent基类

//例程的文件名是Bank.cs
using System.EnterpriseServices;
using System.Runtime.CompilerServices;
using System.Reflection;
namespace BankComponent
{
//继承ServicedComponent
public class Account : ServicedComponent
{
public bool transfer(int from_Account, int to_Account, double amount)
{
//银行转帐的实现细节,这里从略
return true;
}
}
}


生成钥匙文件(Key)

在COM+环境里运行的SERVICED COMPONENT必须是被签署的(有STRONG NAME),所以你开发的组件要用"钥匙"文件来签署。钥匙文件可以用.NET提供的工具sn.exe来生成。最简单的方法是从VISUAL STUDIO提供的COMMNAD PROMPT打开一个DOS窗口,执行如下命令:



版权所有:UML软件工程组织