作者:张劲松 本文选自:赛迪网 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基类
<ccid_nobr>
<ccid_code>//例程的文件名是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;
}
}
}</ccid_code> |
</ccid_nobr>
生成钥匙文件(Key) 在COM+环境里运行的SERVICED COMPONENT必须是被签署的(有STRONG NAME),所以你开发的组件要用"钥匙"文件来签署。钥匙文件可以用.NET提供的工具sn.exe来生成。最简单的方法是从VISUAL STUDIO提供的COMMNAD PROMPT打开一个DOS窗口,执行如下命令:
你可以在源程序里加入COM+相关的属性,这些属性将反映到COM+的设置中。但这不是必须的。你可以不在程序里设置COM+相关的属性,而是等组件发布后,在COM+提供的"组件服务浏览器"里设置组件的属性。在你手工设置之前,COM+会给你的组件设以缺省值。
COM+可设置的属性非常多,这里仅用几个最常见的来示意一下。
发布组件
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)"中,那么客户端程序就不需要一份专用的拷贝了。
<ccid_nobr>
<ccid_code>using BankComponent;
using System;
namespace BankComponentConsoleClient
{
class Client
{
public static int Main()
{
bool bo = false;
int start = Environment.TickCount;
Account act = new Account();
bo = act.transfer(123,234,50.0);
int end = Environment.TickCount;
Console.WriteLine(Peformance: " + (end-start));
return 0;
}
}
}</ccid_code> |
</ccid_nobr>
b. 用VB6开发的COM客户程序
在VB的集成开发环境里新建一个工程,在工程引用(Project Reference)中加入bank.tlb(当你在在运行Regsvcs.exe 时,类库文件(Type Library)会自动生成),然后可以加入如下程序
<ccid_nobr>
<ccid_code>Private Sub Command1_Click()
Dim obj As New Account
Dim bool As Boolean
bool = obj.transfer(123,234,50.0)
MsgBox "The Result is " & bool
End Sub</ccid_code> |
</ccid_nobr>
使用SERVICED COMPONENT的注意事项1. 考虑客户端程序 在开发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这一技术。
SERVICED COMPONENT其它用法本文仅是对如何开发SERVICED COMPONENT作了一个简单的介绍。全面掌握SERVICED COMPONENT还需要进一步的工作。笔者将在随后的文章中进一步介绍如队列组件(Queued Component),松散连接的事件(Loosely Couple Events)等等比较复杂的功能和用法。
分享到:
相关推荐
在ASP.NET中实现这样的组件,通常需要以下技术: 1. **AJAX**:用于创建无刷新的用户体验,使得文件上传可以在后台进行,不阻塞用户界面。 2. **WebAPI或者MVC控制器**:作为接收文件上传请求的后端接口,处理分块...
数据访问组件是.NET Framework中的重要部分,它们允许开发者轻松地与各种数据库进行交互,无论是关系型数据库如SQL Server,还是NoSQL数据库如MongoDB。 .NET Framework的数据访问组件主要由ADO.NET、Entity ...
这个压缩包“Lucene.Net.rar 2.0 ver”包含了适用于ASP.NET开发的组件,使得在.NET环境中构建高性能、可扩展的全文检索功能变得轻而易举。下面我们将深入探讨Lucene.Net 2.0的主要特性和使用方法。 **1. 全文搜索...
ASP.NET 2.0 大文件上传组件是一个用于在ASP.NET环境中处理大文件上传的解决方案。这个组件的主要目的是解决在Web应用中上传大型文件时可能遇到的问题,如内存限制、性能瓶颈以及用户交互体验的提升。它允许用户监控...
在ASP.NET中,数据库访问是常见的需求,为了简化这一过程,开发人员经常创建公用的数据库访问类组件。 标题"ASP.NET公用数据库访问类组件(支持多种数据库)"所提及的组件,是一个设计用于ASP.NET应用程序的通用解决...
ASP.NET是一种由微软开发的服务器端Web应用程序框架,用于构建动态网站、 web 应用程序和 web 服务。这个压缩包文件"ASP.NET 实例 组件 系统 管理 源码"显然是一个包含ASP.NET开发相关实例、组件和系统管理源代码的...
在这个“asp.net下的开发标准组件”教程中,我们将深入探讨ASP.NET开发的核心组件及其使用方法,这对于初学者来说是一份非常宝贵的学习资源。 1. **ASP.NET页面生命周期**: ASP.NET页面生命周期是指从用户请求一...
总结来说,VB.NET创建Excel2007的工作簿涉及了以下知识点: 1. 添加Office Interop引用 2. 创建Excel Application、Workbook和Worksheet对象 3. 设置单元格值、格式和样式 4. 保存和关闭Excel应用 这个过程中,你...
本文将详细探讨如何在 .Net 环境中集成敏感词组件,包括选择合适的开源组件、定义数据验证特性、实现敏感词检测与替换机制,以及如何利用面向切面编程(AOP)和依赖注入技术提高代码的灵活性和可维护性。 ### 使用 ...
这个压缩包可能包含示例代码、教程文档、项目模板等,帮助学习者理解如何使用ADO.NET创建和使用Web服务,以及如何实现数据的高效传输和处理。通过深入学习这些资料,开发者可以更好地掌握.NET框架下的数据访问技术,...
在ASP.NET中实现Word控件,主要是为了在Web应用程序中提供对Microsoft Word文档的查看、编辑和交互功能。这个过程通常涉及到使用ActiveX控件或Web服务来桥接客户端浏览器和服务器端的Word处理能力。以下是一个关于...
3. **控件与窗体**:在VB.NET中,用户界面通常通过窗体和控件构建。本教程会教授如何添加、布局和自定义这些元素,以及如何处理用户的输入事件。 4. **数据类型与变量**:VB.NET有多种内置数据类型,如整型、浮点型...
在ASP.NET中调用RFC函数,我们需要使用SAP Connect向导创建SAPProxy。配置步骤如下: 1. 选择SAP Server,输入Host、ID、Client、User、Password等信息。 2. 选择Object Type为客户代理(Client Proxy),因为这里是R...
ASP.NET是微软公司开发的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了丰富的功能和工具,用于创建动态网站、web应用和服务。标题提到的"asp.net服务器(64位也可以用)"指的是该服务器环境...
ASP.NET组件设计是Web开发中的核心概念,它允许开发者通过构建可重用的代码模块来创建功能丰富的Web应用程序。在ASP.NET中,组件通常被称为控件,这些控件可以是服务器端的,也可以是客户端的,或者是跨越服务器和...
ASP.NET组件设计是Web开发中的核心概念,它允许开发者创建可重用、可维护的代码模块,提升开发效率和软件质量。在这个主题中,我们将深入探讨ASP.NET组件的设计思想、关键技术和实际应用案例。 首先,ASP.NET组件...
在IT行业中,Spring.NET、iBatis.NET和MySQL是三个非常重要的开源技术组件,它们各自在不同的领域发挥着关键作用。Spring.NET是一个.NET框架,它提供了依赖注入(DI)和面向方面编程(AOP)等功能,帮助开发者构建...
ASP.NET 3.5是微软.NET Framework 3.5中的一个重要组成部分,它为Web开发者提供了一整套强大的工具和服务,包括服务器控件、数据绑定、AJAX支持以及丰富的编程模型等。这本书将带领读者深入探究这些特性,尤其是控件...
ASP.NET 是微软开发的一种用于构建Web应用程序的框架,它提供了丰富的功能和组件,方便开发者创建动态网站和Web服务。在ASP.NET中,Datagrid控件是一个常用的数据展示工具,能够以表格的形式显示数据库中的数据。...
在ASP.NET中,可以创建ASP.NET网站和ASP.NET应用程序,但是ASP.NET网站和ASP.NET应用程序开发过程和编译过程是有区别的。ASP.NET应用程序主要有以下特点: q 可以将ASP.NET应用程序拆分成多个项目以方便开发,管理和...