サービス コンポーネントの例

次の例は、クラスとサーバーの 2 つの部分を持つサービス コンポーネントです。この例では、Account クラスは ServicedComponent クラスから派生するため、Account オブジェクトのコンテキストは COM+ でホストされます。この例では、次の属性が適用されます。

  • TransactionAttribute   Account クラスに適用され、トランザクションを Required に設定します。これは、コンポーネント サービス管理ツール (Windows のコントロール パネルから利用可能) を使用して、COM+ コンポーネントにトランザクション サポートを設定するのと同じです。

  • AutoCompleteAttribute   Post メソッドに適用されます。この属性は、メソッドの実行中に未処理の例外が生成された場合に、自動的にトランザクションの SetAbort 関数を呼び出すようにランタイムに指示します。この属性が適用されない場合、ランタイムは SetComplete 関数を呼び出します。

この例で使用されている属性の他に、さまざまなアセンブリ レベルの属性が COM+ 登録情報を提供するために使用されます。サービス コンポーネントには厳密な名前を付けなければなりません。またサービス コンポーネントは、手動登録のためにグローバル アセンブリ キャッシュ (GAC) に配置する必要があります。アセンブリの詳細については、「厳密な名前付きアセンブリ」を参照してください。

Noteメモ :

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+ サービスの概要

その他の技術情報

サービス コンポーネントの作成

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.