部署承載於 Internet 資訊服務中的 WCF 服務
開發和部署承載於 Internet 資訊服務 (IIS) 中的 Windows Communication Foundation (WCF) 服務包括以下任務:
- 確保已正確安裝和註冊 IIS、WCF 和 WCF 啟用組件。
- 建立新的 IIS 應用程式,或重新使用現有的 ASP.NET 應用程式。
- 為 WCF 服務建立 .svc 檔案。
- 將服務實現部署到 IIS 應用程式。
- 配置 WCF 服務。
有關建立承載於 IIS 中的 WCF 服務的詳細演練,請參見如何:在 IIS 中承載 WCF 服務。
確保已正確安裝和註冊 IIS 和 WCF
必須同時安裝 WCF 和 IIS,承載於 IIS 中的 WCF 服務才能正常工作。安裝 WCF(作為 .NET Framework 3.0 的一部分)和 IIS 的過程隨所用作業系統版本的不同而不同。有關 安裝 WCF 和 .NET Framework 3.0 的更多資訊,請參見 Microsoft .NET Framework 3.0 可轉散發元件包(可能為英文網頁)。有關安裝 IIS 的說明可以在安裝 IIS(可能為英文網頁)上找到。
如果電腦上已存在 IIS,則在安裝 .NET Framework 3.0 的過程中自動向 IIS 註冊 WCF。如果在安裝 .NET Framework 3.0 後安裝 IIS,則需要執行其他步驟向 IIS 和 ASP.NET 註冊 WCF。根據您的作業系統,可以按如下所述執行此操作:
- Windows XP SP2 和 Windows Server 2003:使用 ServiceModelReg.exe 工具向 IIS 註冊 WCF:若要使用此工具,請在命令提示字元下鍵入 ServiceModelReg.exe /i /x。
- Windows Vista:安裝 .NET Framework 3.0 的 Windows Communication Foundation Activation Components 子組件。為此,請在控制台中,單擊“添加或刪除程式”,然後單擊“添加/刪除 Windows 組件”。這將啟用“Windows 組件嚮導”。
建立新的 IIS 應用程式或重新使用現有的 ASP.NET 應用程式
承載於 IIS 中的 WCF 服務必須駐留在 IIS 應用程式內。可以建立一個新的 IIS 應用程式專門承載 WCF 服務。或者,可以將 WCF 服務部署到已經承載 ASP.NET 2.0 內容(如 .aspx 頁和 ASP.NET Web 服務 [ASMX])的現有應用程式中。有關 這些選項的更多資訊,請參見 WCF 服務和 ASP.NET 中的“並存裝載 WCF 與 ASP.NET”和“在 ASP.NET 相容模式下承載 WCF 服務”兩節。
請注意,IIS 6.0 和更高版本定期重新啟動獨立的物件導向編程應用程式。預設值為 1740 分鐘。支援的最大值為 71,582 分鐘。可以禁用此重新啟動。有關 此屬性的更多資訊,請參見 PeriodicRestartTime(可能為英文網頁)。
為 WCF 服務建立 .svc 檔案
承載於 IIS 中的 WCF 服務在 IIS 應用程式內表示為特殊內容檔案(.svc 檔案)。此模型與在 IIS 應用程式內將 ASMX 頁表示為 .asmx 檔案的方式類似。.svc 檔案包含 WCF 特定的處理指示 (@ServiceHost),該指令允許 WCF 承載基礎結構啟用所承載的服務以響應傳入訊息。.svc 檔案的最常見文法如以下語句所示。
複製代碼
<% @ServiceHost Service=”MyNamespace.MyServiceImplementationTypeName” %>
它由 @ServiceHost 指令和單個屬性 Service 組成。Service 屬性的值是服務實現的公用語言運行庫 (CLR) 類型名稱。使用此指令與使用以下代碼建立服務主機基本等效。
複製代碼
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
也可以執行其他承載配置,如建立服務的基址列表。也可以使用自訂 ServiceHostFactory 擴充指令以用於自訂承載解決方案。承載 WCF 服務的 IIS 應用程式不負責管理 ServiceHost 執行個體的建立和生存期。收到 .svc 檔案的第一個請求時,託管 WCF 承載基礎結構動態建立必需的 ServiceHost 執行個體。在代碼顯式關閉該執行個體之前或回收應用程式時,不釋放該執行個體。
有關 .svc 檔案文法的更多資訊,請參見 @ServiceHost。
將服務實現部署到 IIS 應用程式
承載於 IIS 中的 WCF 服務與 ASP.NET 2.0 使用相同的動態編譯模型。就像在 ASP.NET 中那樣,可以在各種位置通過幾種方式部署承載於 IIS 中的 WCF 服務的實現代碼,如下所示:
- 作為全域組件快取 (GAC) 或應用程式的 \bin 目錄中的先行編譯 .DLL 檔案。在部署類庫的新版本後,才更新先行編譯的二進位檔案。
- 作為位於應用程式的 \App_Code 目錄中的未編譯源檔案。處理應用程式的第一個請求時,動態需要位於此目錄中的源檔案。對 \App_Code 目錄中檔案進行的任何更改都導致在收到下一個請求時回收和重新編譯整個應用程式。
- 作為直接放置在 .svc 檔案中的未編譯代碼。實現代碼也可以按內聯方式位於服務的 .svc 檔案中,且在 @ServiceHost 指令之後。對內聯代碼進行的任何更改導致在收到下一個請求時回收和重新編譯應用程式。
有關 ASP.NET 2.0 編譯模型的更多資訊,請參見 ASP.NET 編譯概述(可能為英文網頁)。
配置 WCF 服務
承載於 IIS 中的 WCF 服務將其配置儲存在應用程式 Web.config 檔案中。承載於 IIS 中的服務使用與承載於 IIS 外部的 WCF 服務相同的配置元素和文法。但是,下面的約束對 IIS 承載環境是唯一的:
- 承載於 IIS 中的服務的基址。
- 通過將一組基址 URI 傳遞到 ServiceHost 建構函式或者通過在服務配置中提供 <host> 元素,在 IIS 外部承載 WCF 服務的應用程式可以控制這些服務的基址。承載於 IIS 中的服務無法控制其基址;承載於 IIS 中的服務的基址是其 .svc 檔案的地址。
承載於 IIS 中的服務的端點位址
承載於 IIS 中時,任何端點位址始終被認為相對於表示服務的 .svc 檔案的地址。例如,如果 WCF 服務的基址是包含以下終結點配置的 http://localhost/Application1/MyService.svc。
複製代碼
<endpoint address=”anotherEndpoint” … />
這提供了一個可以在“http://localhost/Application1/MyService.svc/anotherEndpoint”上訪問的終結點。
同樣,將Null 字元串用作相對位址的終結點配置元素提供了一個可以在 http://localhost/Application1/MyService.svc(它是基址)上訪問的終結點。
複製代碼
<endpoint address=”” … />
對於承載於 IIS 中的服務的終結點,必須始終使用相對端點位址。如果端點位址未指向承載公開終結點的服務的 IIS 應用程式,則提供完整端點位址(例如,http://localhost/MyService.svc)可能導致在部署服務時出錯。對所承載的服務使用相對端點位址避免了這些潛在衝突。
可用傳輸
承載於 IIS 5.1 和 IIS 6.0 中的 WCF 服務被限制為使用基於 HTTP 的通訊。在這些 IIS 平台上,將所承載的服務配置為使用非 HTTP 綁定會導致服務啟用期間出錯。對於 IIS 7.0,支援的傳輸包括 HTTP、Net.TCP、Net.Pipe、Net.MSMQ 以及用於與現有 MSMQ 應用程式向後相容的 msmq.formatname。
HTTP 傳輸安全
承載於 IIS 中的 WCF 服務可以使用 HTTP 傳輸安全(例如 HTTPS 和 HTTP 身分識別驗證方案,如基本、摘要式和 Windows 整合身分識別驗證),前提是包含該服務的 IIS 虛擬目錄支援這些設定。所承載終結點的綁定上的 HTTP 傳輸安全設定必須與包含它的 IIS 虛擬目錄上的傳輸安全設定匹配。
例如,配置為使用 HTTP 摘要式驗證的 WCF 終結點必須駐留在也配置為允許 HTTP 摘要式驗證的 IIS 虛擬目錄中。IIS 設定和 WCF 終結點設定的不匹配組合會導致服務啟用期間出錯。
轉自MSDN