你目前正处于脱机状态,正在等待 Internet 重新连接

HOW TO:在 Visual C# .NET 中创建 .NET 服务组件

本文的发布号曾为 CHS306296
有关本文的 Microsoft Visual Basic .NET 版本,请参见 312902
有关本文的 Microsoft Visual C++ .NET 版本,请参见 309108

本文引用下面的 Microsoft .NET 框架类库名称空间:
  • System.EnterpriseServices

本任务的内容

概要
本分步指南演示了如何创建使用事务的 .NET 服务组件。本文还将说明如何创建测试服务组件的客户机。Microsoft Enterprise Service 为 .NET 组件提供 Microsoft COM+ 服务。

返回页首

重要说明

  • 服务组件需要有强名称。
  • 应当在"全局程序集缓存"(GAC) 中注册服务组件,因为这些组件是系统级别的资源。服务器应用程序要求安装在 GAC 中,库应用程序则不要求这样(但是建议安装在 GAC 中)。
  • 您可以通过延迟注册自动向 COM+ 注册服务组件,也可以通过 Regsvcs.exe 实用工具手动注册。Regsvcs.exe 位于下面的文件夹中:
    \WINNT\Microsoft.NET\Framework\< 框架版本 >
    有关 Regsvcs.exe 的更多信息,请参阅 Microsoft .NET 框架软件开发工具包 (SDK) 文档。
  • 此示例假定本地计算机上已安装 Microsoft SQL Server。
  • 提供此示例只是为了进行说明。严格地说,此示例的选择查询很适合在 COM+ 事务外运行,因为 COM+ 为事务采用最高隔离级别。若要增大数据库的吞吐量,良好的编程策略是考虑较低事务级别的读取查询。
返回页首

创建 .NET 服务组件

  1. 创建名为 ServicedCOM 的新的 Visual C# 类库项目。
  2. 将默认类和文件名从 Class1.cs 重命名为 SimpleTrans.cs 。为此,请按照下列步骤操作:
    1. 在"类视图"窗口中,右键单击 Class1,然后单击属性
    2. 属性中,将名称属性更改为 SimpleTrans
  3. 添加一个 System.EnterpriseServices 名称空间的引用。
  4. 将下列语句作为第一行添加到 SimpleTrans.cs AssemblyInfo.cs 中:
    using System.EnterpriseServices;
  5. ServicedComponent 继承类(完全限定名:System.EnterpriseServices.ServicedComponent)。
  6. 将下面的代码添加到 *public class* 前:
    [Transaction(TransactionOption.RequiresNew)]
  7. 将下面推荐的属性添加到 AssemblyInfo.cs 中:
    [assembly:ApplicationActivation(ActivationOption.Library)][assembly:ApplicationName("SimpleTrans")]	
    • ActivationOption 属性指示是否在调用方的进程中激活组件。您可以将 Activation.Option 设置为服务器
    • ApplicationName 属性是"COM+ 目录"和"组件服务管理"控制台中显示的 COM+ 应用程序的名称。
  8. 将下面可选属性添加到 SimpleTrans.cs中,就放在 using 语句之后:
    [assembly:Description("Simple Transactional application to show Enterprise Services")]
    此属性为"COM+ 目录"和"组件服务管理"控制台中的 COM+ 应用程序提供说明。
  9. 将下面的方法添加到 SimpleTrans.cs
    // Demos Explicit SetComplete/SetAbortpublic string DoTrans()        {SqlConnection	connection;SqlCommand		command; SqlDataReader	reader;string		name;string		query;		try            {query = "SELECT au_lname, au_fname FROM authors";connection = new SqlConnection("data source = localhost;initial catalog = pubs;UID=sa;PWD=");command = new SqlCommand(query, connection);connection.Open();reader = command.ExecuteReader();				reader.Read();name = reader.GetString(0) + ", " + reader.GetString(1);            }catch (Exception exc)            {ContextUtil.SetAbort();throw exc;            }return name;    }// Demo implicit SetComplete/SetAbort[AutoComplete]public void DoTxAuto(){// Do stuff}
  10. 根据您的环境相应地修改 SqlConnection 字符串。
返回页首

为程序集提供强名称

  1. 单击开始,指向程序,指向 Microsoft Visual Studio .NET,再指向 Visual Studio .NET 工具,然后单击 Visual Studio .NET 命令提示
  2. 在命令提示符下,键入 sn.exe -k ServicedCOM.snk,为程序集创建一个强名称。

    有关使用强名称签署程序集的信息,请参阅 .NET 框架软件开发工具包 (SDK) 文档。
  3. 将 ServicedCOM.snk 复制到项目文件夹中。
  4. 在 AssemblyInfo.cs 中,将 AssemblykeyFile 代码替换为以下代码:
    [assembly:AssemblyKeyFile("..\\..\\ServicedCOM.snk")]
返回页首

将服务组件添加到 COM+

可以在创建第一个实例后让组件动态注册,或者用 Regsvcs.exe 手动注册组件。若要使用 Regsvcs.exe,请按以下步骤操作:
  1. 单击开始,指向程序,指向 Microsoft Visual Studio .NET,再指向 Visual Studio .NET 工具,然后单击 Visual Studio .NET 命令提示
  2. 在命令提示符下,键入 regsvcs servicedcom.dll。这将创建与类同名的 COM+ 库应用程序。忽略警告消息。
返回页首

测试组件

  1. 在"记事本"中打开一个文本文件。
  2. 将下面的代码粘贴到文件中:
    set o =createobject("ServicedCOM.SimpleTrans")MsgBox o.DoTrans()
  3. 文件菜单上,单击保存
  4. 另存为对话框的文件名文本框中,键入 Test.vbs。在保存类型列表中,单击所有文件,然后单击保存
  5. 双击该文件以运行示例。
返回页首
属性

文章 ID:306296 - 上次审阅时间:07/19/2002 20:47:00 - 修订版本: 1.0

  • Microsoft .NET Framework Service Pack 2
  • Microsoft Visual C# .NET 2002 标准版
  • kbhowto kbhowtomaster KB306296
反馈