共用方式為


Serviced 元件範例

以下範例是具有兩個部分 (用戶端與伺服器) 的 Serviced 元件。在此範例中,Account 類別衍生自 ServicedComponent 類別,它可確保 Account 物件的內容裝載於 COM+。此範例套用下列屬性:

  • TransactionAttribute 套用至 Account 類別,以便將交易設為 Required,這與使用「元件服務」」系統管理工具 (可從 Windows 控制台存取) 設定 COM+ 元件的交易支援作用相同。

  • AutoCompleteAttribute 套用至 Post 方法。這個屬性會指示當方法執行,卻產生未處理的例外狀況時,Runtime 應自動呼叫交易的 SetAbort 函式,否則 Runtime 應呼叫 SetComplete 函式。

除了此範例中使用的屬性之外,此處也使用了各種組件層級的屬性,來提供 COM+ 註冊資訊。Serviced 元件必須具有強式名稱,且應置於全域組件快取 (GAC) 中以進行手動註冊。如需組件的其他資訊,請參閱強式名稱的組件

Note注意:

置於 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

請參閱

工作

HOW TO:建立 Serviced 元件

參考

ServicedComponent
System.EnterpriseServices Namespace

概念

Serviced 元件概觀
套用屬性以設定 COM+ 服務
註冊 Serviced 元件
可用 COM+ 服務摘要

其他資源

撰寫 Serviced 元件

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.