首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 分散式開發必備知識 (三):Enterprise Services 與 COM+ 事務實作

     編輯:關於.NET

基本概念

COM+

建構於 COM 基礎,整合 DCOM 與 MTS 程式模型,提供佇列服務、負載平衡、記憶體資料庫、事件服務等,專注分散式網路應用。

Enterprise Services

.NET 平台上的 COM+ 服務封裝。.NET 元件透過繼承 ServicedComponent 封裝為 COM 物件,即可使用 COM+ 服務 (事務、物件池、JIT 啟動等)。實現 .NET 與 COM+ 雙向互通。

核心類別與屬性

  • Context (上下文):COM+ 服務執行環境。物件跨上下文呼叫時,Runtime 透過 Proxy 攔截並注入服務邏輯 (事務、安全等)。
  • [Transaction(TransactionOption.Required)]:宣告式事務,自動管理交易邊界,無需手寫 Commit/Rollback。
  • [ObjectPooling(true, 1, 10)]:啟用物件池,減少建構/解構開銷。
  • ServicedComponent:所有使用 COM+ 服務類別的基類,繼承鏈:ServicedComponent → ContextBoundObject → MarshalByRefObject (支援跨 AppDomain)。
  • DTC (Distributed Transaction Coordinator):分散式事務協調器。

COM+ 服務與上下文

實作 COM+ 事務服務組件

1. 專案建立與屬性設定

[assembly: ApplicationName("FrankEnterpriseServicesTransactionTest")]
[assembly: Description("Coded By Frank Xu Lei 2/14/2009")]
[assembly: ApplicationActivation(ActivationOption.Server)] // 伺服器啟動模式
[assembly: ApplicationAccessControl(false)] // 關閉存取控制

namespace EnterpriseServicesCOM
{
    [EventTrackingEnabled(true)]
    [Description("EnterpriseServices Transaction Test")]
    [ObjectPooling(true, 1, 10)]
    [Transaction(TransactionOption.Supported)] // 支援現有事務
    public class EnterpriseServicesCOMPlusTransaction : ServicedComponent
    {
        // 新增用戶 (操作兩張表,測試事務完整性)
        public bool AddUser(string name, string address)
        {
            try
            {
                // 使用 TableAdapter 操作 user (欄位長度 10) 與 user2 (長度 100)
                new userTableAdapter().Insert(name, address);
                new user2TableAdapter().Insert(name, address); // 第二筆若超長將拋例外
                ContextUtil.SetComplete(); // 事務成功
                return true;
            }
            catch (Exception e)
            {
                ContextUtil.SetAbort(); // 事務回滾
                return false;
            }
        }
        // UpdateUser 同理...
    }
}

2. 強名稱簽名

sn.exe -k FrankXuKey.snk
// 專案屬性 → 簽名 → 選取 .snk 檔

3. 部署至 COM+ (regsvcs.exe)

regsvcs.exe EnterpriseServicesCOM.dll

regsvcs 註冊結果

伺服器作業系統可在「元件服務」 MMC 中查看:

元件服務瀏覽器

元件屬性

可匯出為 MSI 便於部署:

匯出 MSI

客戶端測試

using (var svc = new EnterpriseServicesCOMPlusTransaction())
{
    // 第一次:欄位長度合法,事務成功
    if (svc.AddUser("FrankXu", "ShangHai")) Console.WriteLine("Transaction1 success");
    else Console.WriteLine("Transaction1 failed");

    // 第二次:字串過長導致 user 表插入失敗,事務回滾,user2 也不寫入
    if (svc.AddUser("FrankXuLei2009", "ShangHai2009")) Console.WriteLine("Transaction2 success");
    else Console.WriteLine("Transaction2 failed");
}

測試結果

總結

Enterprise Services 讓 .NET 輕鬆享用 COM+ 企業級服務。宣告式事務 (ContextUtil.SetComplete/SetAbort) 极大簡化分散式事務編程。下一篇將介紹 Web Service 及 WSE 安全開發。

完整代碼下載:EnterpriseServices.rar

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved