COM+组件与COM+服务使用的区别
近几年来,流行采用N-Tier类式应用程序设计结构来开发分布式应用程序,并将常变动的商业逻辑和数据存取动作包装在组件(Component)当中,然后将这些组件安装到COM+集中管理。但是什么时候使用COM+组件什么时候使用COM+服务呢?我做了一个COM+组件与一个COM+服务,想在此和大家探讨这个问题。并附有源代码下载。
1.COM+组件的开发
前两天用C#开发了一个加密解密的COM+组件,在装有VS2003和Win2000的机器上编译并运行通过。紧接着在没有安装VS2003的框架的机器上注册了此COM组件。用ASP测试运行通过。
注册方法:
dos下运行
注册
regasm /tlb SXCryptPwd.tlb SXCryptPwd.dll
gacutil /I SXCryptPwd.dll
注销
regasm /unregister SXCryptPwd.dll
注册完成。
ASP的使用方法:
<%
set obj = Server.CreateObject("SXCryptPwd.MyEnCrypt")
dim str1
str1 = obj.MyEncoding("20050708") // 加密
response.write("strEnCript=" & str1 & "<br>")
dim str2
str2 = obj.MyDecoding(str1) // 解密
response.write("strDecrypt=" & str2 & "<br>")
%>
和调用普通的COM是一样的。
这里可以下载源代码
http://www.cnblogs.com/fineboy/archive/2005/07/28/201672.html
2.COM+服务的开发
功能是这样的:从数据库表中根据主键取出一个字段的值并返回。特简单的一个COM+服务,实际上是没有任何意义的。这里主要是介绍COM+服务的开发过程。具体的文档都在程序当中,大家可以去看看。下面简单的介绍一下COM+服务的开发步骤:
(1)新建一个类,让该类继承ServicedComponent类,ServicedComponent类是所有使用COM+服务的类的基类;
(2)让该类重载几个基类的方法,Activate方法、Deactivate()方法、CanBePooled方法
(3)定义一个public方法,用来从数据库中读取数据
(4)凡是要放在COM+组件服务管理工具的.NET组件,都必须要有一个Strong Name以做识别,因此还必须为他生成一个强名称。
(5)修改AssemblyInfo.cs中的[assembly:AssemblyKeyFile(“”)]改为[assembly:AssemblyKeyFile(“强名称的文件名”)],然后再增加一行[assembly:ApplicationName(“UCOMTEST”)],他表示此服务在COM+服务管理器中的名字。
关于客户端的开发,见源程序。这里下载源代码,前面那个代码有点小错误,昨天晚上(2005-8-18晚上)重新写了一个,测试成功的,下载源代码。
3.是用COM+组件还是用COM+服务
我想把一些API封装到一个组件里,里面有一些简单的数据库操作,是用COM+组件好还是用COM+服务好,想在这和大家共同探讨一下。