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

解決 COM 組件呼叫回傳 HRESULT E_FAIL 錯誤:MSDTC 與防火牆完整配置

     編輯:關於.NET

現象

呼叫 SHDOCVW (WebBrowser) 等 COM 組件時拋出 HRESULT E_FAIL,通常因分散式交易協調器 (MSDTC) 未啟用或防火牆阻攔網路交易通訊。

解決方案一:Windows XP / 2000 / 2003

  1. 啟用 MSDTC 服務:控制台 → 管理工具 → 服務 → Distributed Transaction Coordinator → 啟動並設為自動。
  2. 配置 MSDTC 安全性:
    • 控制台 → 管理工具 → 元件服務 → 電腦 → 我的電腦 → 右鍵屬性 → MSDTC 標籤 → 安全性設定。
    • 勾選:網路存取 下的「允許輸出」、「允許輸入」、「不要求驗證」。
    • (參考圖片配置)
  3. 重啟 IIS:iisreset。

解決方案二:Windows Server 2008 / Vista / 7 及更新版本

  1. 啟用 MSDTC 服務:同前,服務中啟動 Distributed Transaction Coordinator。
  2. 配置進階防火牆規則:
    • 控制台 → 管理工具 → 本地安全性原則 → 進階安全性 Windows 防火牆 → 右鍵屬性。
    • 在「輸出連線」與「輸入連線」中選擇「允許」。
    • 或建立入站/出站規則允許 MSDTC 通訊埠 (預設動態 RPC 埠,建議配置固定埠範圍)。

應用場景

  • 程式碼建立網域使用者、配置 NTFS 資料夾權限(涉及跨機器資源操作)。
  • 任何涉及 System.EnterpriseServices、TransactionScope、COM+ 元件的分散式交易場景。

驗證步驟

  1. 編寫簡單測試程式呼叫問題 COM 組件。
  2. 確認 MSDTC 服務狀態為「執行中」。
  3. 使用 dtcping 或 Test-Dtc (PowerShell) 驗證雙向通訊。
  4. 觀察錯誤是否消失。

結語

HRESULT E_FAIL 在 COM 互操作中常為「分散式交易基礎設施未就緒」的通用掩碼。標準化部署「啟用 MSDTC + 開放防火牆雙向通訊 + 重啟 IIS」可徹底解決此類問題,適用於所有依賴 MSDTC 的 .NET/COM 應用。

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