您的位置:首页 > 编程语言 > C#

Visual C# .NET 中创建 .NET 服务组件

2008-12-03 10:41 330 查看
本分步指南演示了如何创建使用事务的 .NET 服务组件。本文还将说明如何创建测试服务组件的客户机。Microsoft Enterprise Service 为 .NET 组件提供 Microsoft COM+ 服务。



回到顶端

重要说明

loadTOCNode(2, 'summary');


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



回到顶端

创建 .NET 服务组件

loadTOCNode(2, 'summary');


创建名为 ServicedCOM 的新的 Visual C# 类库项目。
将默认类和文件名从 Class1.cs 重命名为 SimpleTrans.cs 。为此,请按照下列步骤操作:

在"类视图"窗口中,右键单击 Class1,然后单击属性
属性中,将名称属性更改为 SimpleTrans

添加一个 System.EnterpriseServices 名称空间的引用。
将下列语句作为第一行添加到 SimpleTrans.cs AssemblyInfo.cs 中:

using System.EnterpriseServices;

ServicedComponent 继承类(完全限定名:System.EnterpriseServices.ServicedComponent)。
将下面的代码添加到 *public class* 前:

[Transaction(TransactionOption.RequiresNew)]

将下面推荐的属性添加到 AssemblyInfo.cs 中:

[assembly:ApplicationActivation(ActivationOption.Library)]
[assembly:ApplicationName("SimpleTrans")]


ActivationOption 属性指示是否在调用方的进程中激活组件。您可以将 Activation.Option 设置为服务器
ApplicationName 属性是"COM+ 目录"和"组件服务管理"控制台中显示的 COM+ 应用程序的名称。

将下面可选属性添加到 SimpleTrans.cs中,就放在 using 语句之后:

[assembly:Description("Simple Transactional application to show Enterprise Services")]
此属性为"COM+ 目录"和"组件服务管理"控制台中的 COM+ 应用程序提供说明。
将下面的方法添加到 SimpleTrans.cs

// Demos Explicit SetComplete/SetAbort
public 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
}

根据您的环境相应地修改 SqlConnection 字符串。



回到顶端

为程序集提供强名称

loadTOCNode(2, 'summary');


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

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

[assembly:AssemblyKeyFile("..//..//ServicedCOM.snk")]




回到顶端

将服务组件添加到 COM+

loadTOCNode(2, 'summary');

可以在创建第一个实例后让组件动态注册,或者用 Regsvcs.exe 手动注册组件。若要使用 Regsvcs.exe,请按以下步骤操作:

单击开始,指向程序,指向 Microsoft Visual Studio .NET,再指向 Visual Studio .NET 工具,然后单击 Visual Studio .NET 命令提示
在命令提示符下,键入 regsvcs servicedcom.dll。这将创建与类同名的 COM+ 库应用程序。忽略警告消息。



回到顶端

测试组件

loadTOCNode(2, 'summary');


在"记事本"中打开一个文本文件。
将下面的代码粘贴到文件中:

set o =createobject("ServicedCOM.SimpleTrans")

MsgBox o.DoTrans()

文件菜单上,单击保存
另存为对话框的文件名文本框中,键入 Test.vbs。在保存类型列表中,单击所有文件,然后单击保存
双击该文件以运行示例。

http://support.microsoft.com/kb/306296/zh-cn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐