UML软件工程组织 |
如何在.NET中创建服务型组件(3) |
作者:张劲松 本文选自:赛迪网 2002年12月03日 |
发布组件 SERVICED COMPONENT发布是相对比较复杂的一步。本文不想就COM+注册的原理和细节展开讨论,只就最基本的两种发布方法做一介绍。要注意的一点是发布组件涉及到对COM+的目录(Catelog)进行改动,所以操作者必须有管理员的权限。 a. 动态发布 动态发布不需要手工将组件安装在COM+环境中,程序在运行的时候自动安装组件到COM+中去(只有用.NET开发的客户端程序才可以在运行时将组件安装到COM+中,传统的COM客户程序没有这一功能)。当管制客户端程序(Managed Client Application)第一次调用SERVICED COMPONENT时,.NET运行时会自动侦测到SERVICED COMPONENT还没有注册安装到COM+环境里,于是.NET运行时将根据该组件的属性将它注册安装到COM+中去,并响应客户程序的调用。以后客户程序再次调用该组件的函数时,已经安装的组件会直接响应调用。 在管制客户第一次调用SERVICED COMPONENT服务的时,.NET在幕后进行注册和属性设置,你会感到有非常明显的延迟。在笔者的计算机上(1.13GHZ SONY NOTEBOOK),这一过程要花费大约12秒。好在这一注册和安装过程只发生一次。 动态发布的好处就是非常的简单,用户只需要把编译好的组件(DLL ASSEMBLY)拷贝到客户端应用程序的目录下就可以了。.NET运行时会接管余下的事情。 b. 手工发布 手工发布比动态发布要麻烦一些,但你有更多的控制。另外动态发布要求客户端程序目录下有一份编译好的组件拷贝。如果计算机上有多个客户端程序的话,那就意味着该计算机上有多份同样组件的拷贝。除了冗余以外,将来的组件升级也会有一些潜在的问题。在这种情况下,你可能更愿意将组件放到"公共汇编缓冲池去(GAC)"。手工发布组件你需要.NET提供的公共汇编缓冲池工具Gacuti.exe和服务安装工具Regsvcs.exe。就文中给出的例程而言,你需要在DOS窗口中键入以下命令。 客户端程序的开发 用.NET开发的SERVICES COMPONENT可以被.NET的客户程序以及传统的COM客户程序所调用。下面给出两个小的例程来示范一下。 a. .NET客户程序 用.NET开发客户程序没有说明特别的。只需要引用开发好的组件就可以了。如果组件被安装到了"公共汇编缓冲池去(GAC)"中,那么客户端程序就不需要一份专用的拷贝了。 using BankComponent;
在VB的集成开发环境里新建一个工程,在工程引用(Project Reference)中加入bank.tlb(当你在在运行Regsvcs.exe 时,类库文件(Type Library)会自动生成),然后可以加入如下程序 Private Sub Command1_Click() 使用SERVICED COMPONENT的注意事项
在开发SERVICED COMPONENT时,要注意什么样的客户程序会使用它。 因为COM客户程序和用.NET开发的客户程序对SERVICED COMPONENT有不同的要求。如果将来有基于COM的客户程序,那么要在开发组件中注意以下几点: · 不要使用带参数的创建函数(Parameterized constructors) · 不要使用静态函数 (Static function) · 定义事件源接口(Event-source interfaces) · 在用户定义的异常(User-defined Exceptions)中包含HRESULTs 2. 慎重使用SERVICED COMPONENT 在COM+环境中运行.NET开发的组件要通过COM->.NET中间层,并且COM到COM+还会引入一层CONTEXT LAYER. 这对程序的性能有很大的影响。你如果运行一下本文提供的小程序有就会有一些感性认识。另外,在理论上讲,使用SERVICED COMPONENT会影响程序的可移植性。因为COM+必尽是Microsoft专有的技术,其它平台如LINUX即使移植.NET,也不会移植这部分功能。所以只有在真正需要COM+提供的服务,比如跨数据源的交易处理,基于角色的安全管理的时候,再使用SERVICED COMPONENT这一技术。
(责任编辑 Sunny)
|
版权所有:UML软件工程组织 |