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

COM 原理與應用:分散式 COM (DCOM) 架構與機制

     編輯:關於C++

DCOM 核心概念

DCOM (Distributed COM) 將 COM 的進程透明性擴展為位置透明性:元件與客戶端可位於不同電腦(區域網、廣域網、Internet),通訊細節由 DCOM 處理,程式碼無需修改。

從 COM 到 DCOM

  • 本地進程外元件:LPC (Local Procedure Call) 跨進程通訊。
  • DCOM:將 LPC 替換為RPC (Remote Procedure Call) 網路傳輸,路徑變長、環境更脆弱,需更完善的錯誤處理與可靠性機制。

遠端物件定位與建立

  1. 客戶端呼叫 CoCreateInstanceEx 等建立函數,提供 COSERVERINFO 結構指定遠端機器名。
  2. 或透過 DCOM 設定工具 (dcomcnfg.exe) 在註冊表 HKCR\AppID 設定 RemoteServerName(位置透明)。
  3. 本地 SCM (Service Control Manager, Rpcss.exe) 透過 RPC 呼叫遠端 SCM。
  4. 遠端 SCM 啟動元件進程、建立物件、回傳介面指標。
  5. 經封送處理建立代理器/存根,後續通訊直接在代理器/存根間進行,不再經 SCM。

封送處理與 ORPC

  • 封送處理:參數打包為資料封包(標準/自訂封送),跨進程/機器傳輸。
  • DCOM 採用 NDR (Network Data Representation) 標準資料表示法(DCE RPC 規範),確保異構平台相容。
  • ORPC (Object RPC):DCOM 協議別名,建立面向物件的遠端呼叫規範,封包附加 IPID (Interface Pointer Identifier)、版本、擴展資訊。
  • 客戶端需定期 pinging 遠端物件維持連線(預設 2 分鐘間隔,3 次失敗判定超時)。

DCOM 關鍵特性

特性說明
位置透明性客戶端程式碼無感知遠端位置
可伸縮性利用 OS 伸縮性;元件可部署於不同伺服器,無需修改程式碼
可設定性dcomcnfg.exe 圖形化設定安全性、身分、位置,無需重編譯
安全性存取安全性(誰可呼叫)、啟動安全性(誰可建立),基於 Windows NT 可擴展安全架構
協定無關性支援 TCP/IP、SPX/IPX、HTTP 等多種傳輸協定
平台獨立性ORPC/NDR 為跨平台標準

物件啟動模式

  1. 註冊表指定遠端伺服器:AppID 關聯多個 CLSID,共享進程與設定。
  2. 程式碼指定伺服器:CoCreateInstanceEx 等 API 傳入 COSERVERINFO,支援動態負載平衡(分派服務物件選擇最輕載伺服器)。

代理進程:讓 DLL 也能遠端執行

  • 進程內元件 (DLL) 無法直接在遠端機器執行,需代理進程 載入 DLL。
  • Windows 提供預設代理進程(混合執行緒模型、偽 COM 服務)。
  • 條件:註冊表 CLSID\AppID 設定 DllSurrogate、CLSCTX_LOCAL_SERVER 旗標、無 LocalServer32、有 InprocServer32。
  • 優點:DLL 崩潰不影響客戶端;單一代理進程服務多客戶端;享有代理進程安全性。

單體物件連接遠端實例

  • COM 命名與綁定機制(Moniker)同樣適用遠端物件。
  • 連接管理:優化遠端 AddRef/Release(OXID 物件匯出器識別碼)、pinging 機制偵測客戶端異常終止、連接點機制支援雙向通訊、連接傳遞實現負載平衡分派。

併發管理:執行緒模型與訊息過濾器

  • 套間執行緒 (STA):對應 UI 執行緒,有訊息迴圈,COM 自動同步(單執行緒進入),物件無需自行同步。
  • 自由執行緒 (MTA):對應 Worker 執行緒,多執行緒並發呼叫,物件必須自行同步(執行緒安全)。
  • 訊息過濾器:處理同步/非同步/輸入同步呼叫時的重入與阻塞問題。

安全模型

  • 建立於底層安全提供者(Windows NT 鑑別服務)。
  • RPC 鑑別 5 層級:無 → 連線時 → 每呼叫 → 每封包完整性 → 加密。
  • 兩類安全性:啟動安全性(誰可建立物件)、呼叫安全性(誰可呼叫方法),支援模擬等級與授權。

總結

DCOM 以 ORPC/NDR 為基礎,提供位置透明、可設定、安全、可伸縮的分散式元件架構。核心機制包括:遠端啟動 (SCM)、封送處理 (NDR)、代理進程 (DLL 遠端化)、連接管理 (OXID/pinging)、併發模型 (STA/MTA) 與分層安全模型。

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