Serviced 元件範例
以下範例是具有兩個部分 (用戶端與伺服器) 的 Serviced 元件。在此範例中,Account
類別衍生自 ServicedComponent 類別,它可確保 Account
物件的內容裝載於 COM+。此範例套用下列屬性:
TransactionAttribute 套用至
Account
類別,以便將交易設為 Required,這與使用「元件服務」」系統管理工具 (可從 Windows 控制台存取) 設定 COM+ 元件的交易支援作用相同。AutoCompleteAttribute 套用至 Post 方法。這個屬性會指示當方法執行,卻產生未處理的例外狀況時,Runtime 應自動呼叫交易的 SetAbort 函式,否則 Runtime 應呼叫 SetComplete 函式。
除了此範例中使用的屬性之外,此處也使用了各種組件層級的屬性,來提供 COM+ 註冊資訊。Serviced 元件必須具有強式名稱,且應置於全域組件快取 (GAC) 中以進行手動註冊。如需組件的其他資訊,請參閱強式名稱的組件。
注意: |
---|
置於 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
概念
Serviced 元件概觀
套用屬性以設定 COM+ 服務
註冊 Serviced 元件
可用 COM+ 服務摘要
其他資源
Copyright © 2007 by Microsoft Corporation. All rights reserved.