服务组件示例
下面的示例是一个由客户端和服务器两部分组成的服务组件。在该示例中,Account
类派生自 ServicedComponent 类,这样可确保 Account
对象的上下文在 COM+ 中承载。此示例中应用了以下属性:
TransactionAttribute 应用于
Account
类,以便将事务设置为 Required,此操作相当于使用 Windows“控制面板”中的“组件服务”管理工具设置 COM+ 组件支持的事务。AutoCompleteAttribute 应用于 Post 方法。此属性指示,如果在执行该方法期间生成未处理的异常,则运行库自动对事务调用 SetAbort 函数;否则,运行库调用 SetComplete 函数。
除此示例中使用的属性外,还有许多程序集级别的属性也用于提供 COM+ 注册信息。对于手动注册,服务组件必须具有强名称,并且应该置于全局程序集缓存 (GAC) 中。有关程序集的其他信息,请参阅Strong-Named Assemblies。
注意: |
---|
置于 GAC 中的程序集不能使用动态注册。如果创建了服务器应用程序,那么要想使用该服务器应用程序,必须用 Windows Installer 将程序集及其所依赖的所有程序集添加到 GAC 中;否则,该应用程序将生成异常。 |
BankComponent 服务器
Imports System.EnterpriseServices
Imports System.Runtime.CompilerServices
Imports System.Reflection
' Supply the COM+ application name.
<assembly: ApplicationName("BankComponent")>
' Supply a strong-named assembly.
<assembly: AssemblyKeyFileAttribute("BankComponent.snk")>
Namespace BankComponent
<Transaction(TransactionOption.Required)> _
Public Class Account
Inherits ServicedComponent
<AutoComplete()> _
Public Sub Post(accountNum As Integer, amount As Double)
' Updates the database; no need to call SetComplete.
' Calls SetComplete automatically if no exception is generated.
End Sub
End Class
End Namespace
using System.EnterpriseServices;
using System.Runtime.CompilerServices;
using System.Reflection;
// Supply the COM+ application name.
[assembly: ApplicationName("BankComponent")]
// Supply a strong-named assembly.
[assembly: AssemblyKeyFileAttribute("BankComponent.snk")]
namespace BankComponent
{
[Transaction(TransactionOption.Required)]
public class Account : ServicedComponent
{
[AutoComplete]
public bool Post(int accountNum, double amount)
{
/* Updates the database; no need to call SetComplete.
Calls SetComplete automatically if no exception is
generated. */
return false;
}
}
}
BankComponent 客户端
Imports BankComponent
Public Class Client
Shared Sub Main()
Dim Account As New Account()
' Post money into the account.
Account.Post(5, 100)
End Sub
End Class
using BankComponent;
namespace BankComponentConsoleClient
{
class Client
{
public static int Main()
{
try
{
Account act = new Account();
// Post money into the account.
act.Post(5, 100);
return(0);
}
catch
{
return(1);
}
}
}
}
Makefile.bat
可以按如下所示编译服务器和客户端:
sn –k BankComponent.snk
vbc /t:library /r:System.EnterpriseServices.dll Bank.vb
vbc /r:Bank.dll /r:System.EnterpriseServices.dll BankClient.vb
sn –k BankComponent.snk
csc /t:library /r:System.EnterpriseServices.dll Bank.cs
csc /r:Bank.dll BankClient.cs
请参见
任务
参考
ServicedComponent
System.EnterpriseServices Namespace
概念
服务组件概述
应用属性以配置 COM+ 服务
注册服务组件
可用的 COM+ 服务摘要
其他资源
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。