註冊服務元件
服務元件是裝載在 COM+ 應用程式中,而且這個應用程式必須要能夠存取它。就存取範圍而言,服務元件具有下列註冊和組態需求:
- 組件必須具有強式名稱 (Strong Name)。如需詳細資訊,請參閱使用強式名稱簽名組件。
- 組件必須註冊到 Windows 登錄中。
- 型別程式庫定義必須在特定的 COM+ 應用程式中註冊和安裝。
- 用程式加入的服務必須在 COM+ 資料庫目錄中設定。
對服務元件有用的註冊資訊包括下列各項:
- COM+ 應用程式識別碼
- 啟動型別
- 描述資訊
COM+ 應用程式識別碼
您可以用名稱或 GUID 來辨識現有的 COM+ 目標應用程式。.NET Framework 服務安裝工具 (Regsvcs.exe) 提供 /appname: 選項,讓您指定應用程式名稱。下列範例會說明如何使用組件層級的 ApplicationName 屬性來提供應用程式名稱。
Imports System.EnterpriseServices
<assembly: ApplicationName("BankComponent")>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: ApplicationName("BankComponent")]
public class Account : ServicedComponent
{
static void Main()
{}
}
如果您依照下列範例中的方式,將 ApplicationID 屬性 (或 Guid 屬性) 套用至組件,所有應用程式的搜尋都會根據 GUID,而非根據應用程式名稱。
Imports System.EnterpriseServices
<assembly: ApplicationName("BankComponent")>
< assembly: ApplicationID("4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c")>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: ApplicationName("BankComponent")]
[ assembly: ApplicationID("4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c")]
public class Account : ServicedComponent
{
static void Main() {}
}
注意 對動態註冊而言,指定目標應用程式的唯一方式,就是在設計階段套用 ApplicationNameAttribute、ApplicationIDAttribute 或 GuidAttribute 屬性。.NET 安裝工具 (Regsvcs.exe) 提供 /appname: 參數,可讓您在編譯時指定應用程式名稱或 GUID。Regsvcs.exe 也提供 /parname: 參數,可讓您識別特定的 COM+ 分割。COM+ 分割服務只能用於 Windows Server 2003 平台。
如果無法辨識或找不到目標應用程式,註冊機制會使用不含版本號碼的組件完整名稱來建立應用程式。
注意 ApplicationIDAttribute 屬性不能用於 COM+ 分割服務。如果您使用 COM+ 分割服務,套用 ApplicationIDAttribute 屬性可防止磁碟分割組態。COM+ 分割服務只能用於 Windows Server 2003 平台。
啟動型別
啟動型別會判斷服務元件是在呼叫端的處理序 (程式庫) 或新的處理序 (伺服器) 中建立的。您可以套用 ApplicationActivationAttribute 屬性來指定啟動型別。
注意 如果將 ApplicationActivationAttribute 屬性設定為 Server,在使用它之前,必須使用 Windows Installer,將組件和組件所根據的任何組件加入至全域組件快取 (GAC) 中;否則,應用程式會產生例外狀況。此外,如果將 ApplicationActivationAttribute 屬性設定為 Server,也必須將服務元件的任何參數標記為 Serializable 或衍生自 MarshalByRefObject類別。否則,應用程式會產生例外狀況。
下列範例會說明如何將啟動型別設定為 "server"。
Imports System.EnterpriseServices
< assembly: ApplicationActivation(ActivationOption.Server)>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: ApplicationActivation(ActivationOption.Server)]
public class Account : ServicedComponent
{
static void Main() {}
}
描述資訊
描述是擇性的 (Optional),但有時候對於辨別類似的組件很有用。下列範例會說明如何套用 DescriptionAttribute 屬性來設定組件的描述。
Imports System.EnterpriseServices
< assembly: Description("BankComponent assembly")>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: Description("BankComponent assembly")]
public class Account : ServicedComponent
{
static void Main()
{}
}
本章節中的下列主題會描述用來部署使用 COM+ 服務的應用程式註冊機制:
這兩個註冊機制都是藉由組合註冊服務元件所需的步驟,來簡化註冊程序。兩者都要求組件使用者必須是管理員群組的成員。對於動態註冊,有些註冊資訊 (稍後定義) 可以在設計階段提供,有些可在編譯時間提供。對於手動註冊,您可以在設計階段、編譯時間和註冊時間提供這項資訊。如果您省略註冊資訊,註冊程序會從中繼資料產生這項資訊。註冊程序會偵測不相容的屬性組合,有時候還會加以更正。
請參閱
撰寫服務元件 | 服務元件概觀 | ApplicationNameAttribute | ApplicationIDAttribute | GuidAttribute | ApplicationActivationAttribute | DescriptionAttribute | 套用屬性以設定服務 | 服務元件範例 | 可用的 COM+ 服務摘要 | 使用屬性 (Attribute) 擴充中繼資料 | System.EnterpriseServices 命名空間