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

WCF 服務裝載完整指南:四種宿主模式深度解析

     編輯:關於.NET

服務宿主基本概念

公開 WCF 服務需提供執行環境(宿主)。如同 .NET CLR 需宿主執行代碼,WCF 宿主運行於應用程式域,可建立一或多個 ServiceHost 實例。

應用程式域中托管 ServiceHost 關係圖

一般不建議在單一應用程式域建立多個 ServiceHost;若需裝載多服務,宜在單一宿主內透過多端點公開。僅當需要不同安全性內容時,才建立多個 ServiceHost。

四大典型宿主模式

  1. Self-Hosting(自裝載,受控應用程式)
  2. Managed Windows Services(Windows 服務)
  3. Internet Information Services (IIS)
  4. Windows Process Activation Service (WAS)

本文以統一服務合約 IDocumentsExplorerService、實作類別 DocumentsExplorerService 及資料合約 Document、DocumentList 為例,逐一示範。

1. 自裝載

在主控台、WinForms 或 ASP.NET 應用程式中,使用 ServiceHost<T> 的 Open()/Close() 即可。必須確保宿主進程在服務期間不關閉(主控台用 Console.Read() 阻塞,WinForms 放在主視窗邏輯)。

using (ServiceHost host = new ServiceHost(typeof(DocumentsExplorerService)))
{
    host.Open();
    Console.WriteLine("The Service had been launched.");
    Console.Read();
}

app.config 需設定 <baseAddresses>、端點繫結(如 basicHttpBinding)、中繼資料交換端點等。客戶端 app.config 需對應服務位址與繫結設定。

優缺點:簡單易實作,適合開發測試/演示;但缺乏易用性、管理性、可靠性與效能保障,企業級極少採用。支援所有繫結。

2. Windows 服務宿主

克服自裝載缺點:易於啟動/停止、故障自動重啟、可設為自動啟動、具備 SCM 管理、安全性與日誌機制。

實作步驟:建立 Windows Service 專案 → 繼承 ServiceBase → 覆寫 OnStart()/OnStop() 建立/關閉 ServiceHost → 加入 app.config(內容同自裝載) → 建立安裝類 (Installer) → 以 installutil.exe 安裝。

protected override void OnStart(string[] args)
{
    if (m_serviceHost != null) m_serviceHost.Close();
    m_serviceHost = new ServiceHost(typeof(DocumentsExplorerService));
    m_serviceHost.Open();
}
protected override void OnStop()
{
    if (m_serviceHost != null) { m_serviceHost.Close(); m_serviceHost = null; }
}

加入安裝程式選單

服務控制管理器畫面

評價:非 Vista 環境下企業級首選,支援所有繫結、限制最小;缺點是部署相對複雜(需 installutil 或安裝專案自訂動作)。

3. IIS 宿主(IIS 6.0)

需加入 .svc 檔案(或直接建立 WCF Service 專案)。.svc 透過 @ServiceHost 指令指定服務型別、語言、除錯模式、CodeBehind 等。服務程式碼/組件限制放置於:.svc 內嵌、GAC、Bin 目錄、App_Code 目錄四處之一。

加入 svc 檔案 建立 WCF Service 專案 產生的 svc 檔案

自訂 ServiceHost 需實作 ServiceHostFactory 並在 @ServiceHost Factory=... 指定。

web.config 設定與自裝載類似,但無基底位址——IIS 自動以 .svc 虛擬路徑為基底位址(如 https://localhost/DocumentsExplorer/HostService.svc)。

IIS 建立虛擬目錄

致命弱點:僅支援 HTTP 繫結,無法在區域網路利用 TCP、MSMQ、Peer-to-Peer 等高效傳輸。

4. WAS 宿主(IIS 7.0 / Vista / Server 2008+)

WAS 為 IIS 7.0 核心組件,可獨立安裝,支援所有 WCF 傳輸協定、連接埠與佇列,突破 IIS 6.0 僅限 HTTP 的限制。裝載方式與 IIS 大同小異(同需 .svc、虛擬目錄/應用程式、應用程式集區設定),但繫結不再受宿主限制。

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