建構於 COM 基礎,整合 DCOM 與 MTS 程式模型,提供佇列服務、負載平衡、記憶體資料庫、事件服務等,專注分散式網路應用。
.NET 平台上的 COM+ 服務封裝。.NET 元件透過繼承 ServicedComponent 封裝為 COM 物件,即可使用 COM+ 服務 (事務、物件池、JIT 啟動等)。實現 .NET 與 COM+ 雙向互通。
ServicedComponent → ContextBoundObject → MarshalByRefObject (支援跨 AppDomain)。
[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 同理...
}
}
sn.exe -k FrankXuKey.snk
// 專案屬性 → 簽名 → 選取 .snk 檔
regsvcs.exe EnterpriseServicesCOM.dll

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


可匯出為 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