サービス コンポーネントの例
次の例は、クラスとサーバーの 2 つの部分を持つサービス コンポーネントです。この例では、Account
クラスは ServicedComponent クラスから派生するため、Account
オブジェクトのコンテキストは COM+ でホストされます。この例では、次の属性が適用されます。
TransactionAttribute
Account
クラスに適用され、トランザクションを Required に設定します。これは、コンポーネント サービス管理ツール (Windows のコントロール パネルから利用可能) を使用して、COM+ コンポーネントにトランザクション サポートを設定するのと同じです。AutoCompleteAttribute Post メソッドに適用されます。この属性は、メソッドの実行中に未処理の例外が生成された場合に、自動的にトランザクションの SetAbort 関数を呼び出すようにランタイムに指示します。この属性が適用されない場合、ランタイムは SetComplete 関数を呼び出します。
この例で使用されている属性の他に、さまざまなアセンブリ レベルの属性が COM+ 登録情報を提供するために使用されます。サービス コンポーネントには厳密な名前を付けなければなりません。またサービス コンポーネントは、手動登録のためにグローバル アセンブリ キャッシュ (GAC) に配置する必要があります。アセンブリの詳細については、「厳密な名前付きアセンブリ」を参照してください。
メモ : |
---|
GAC 内に配置されているアセンブリでは、動的登録を使用できません。サーバー アプリケーションを作成した場合、Windows インストーラを使用して、サーバー アプリケーションが依存するすべてのアセンブリを 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+ サービスの概要
その他の技術情報
Copyright © 2007 by Microsoft Corporation.All rights reserved.