部署已裝載網際網路資訊服務的 WCF 服務
開發與部署由網際網路資訊服務 (IIS) 裝載的 Windows Communication Foundation (WCF) 服務包含下列工作:
- 確定 IIS、WCF,和 WCF 啟動元件都已正確安裝及註冊。
- 建立新的 IIS 應用程式,或是重複使用現有的 ASP.NET 應用程式。
- 建立 WCF 服務的 .svc 檔案。
- 將服務實作部署到 IIS 應用程式。
- 設定 WCF 服務。
如需建立 IIS 裝載的 WCF 服務之詳細逐步解說,請參閱 HOW TO:在 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 找到 (本頁面可能為英文)。
.NET Framework 3.0 的安裝處理序會將 WCF 自動註冊到 IIS 上 (如果 IIS 已經存在電腦上的話)。如果 IIS 是在 .NET Framework 3.0 之後才安裝,則您需要採取額外步驟將 WCF 註冊到 IIS 和 ASP.NET。請依據您的作業系統,採取下列適當的步驟:
- Windows XP SP2 與 Windows Server 2003:使用 ServiceModelReg.exe 工具將 WCF 註冊到 IIS:若要使用此工具,請在命令提示字元中輸入 ServiceModelReg.exe /i /x。
- Windows Vista:安裝 .NET Framework 3.0 的 Windows Communication Foundation 啟動元件子元件。若要這麼做,在 [控制台] 中,按一下 [新增或移除程式],然後按一下 [新增/移除 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 屬性值就是服務實作的 Common Language Runtime (CLR) 型別名稱。基本上,使用此指示詞與使用下列程式碼來建立服務主機是一樣的:
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
其他的裝載組態,例如建立服務的基底位址清單,也能夠透過此方式來完成。您也可以使用自訂的 ServiceHostFactory 來延伸指示詞,以便搭配自訂裝載方案來使用。裝載 WCF 服務的 IIS 應用程式不負責管理 ServiceHost 執行個體的建立與存留期。Managed WCF 裝載基礎結構會在第一次收到 .svc 檔案要求時,動態建立必要的 ServiceHost 執行個體。除非程式碼明確地關閉此執行個體,或當應用程式已回收時,才會釋放此執行個體。
如需 .svc 檔案語法的詳細資訊,請參閱 @ServiceHost。
將服務實作部署到 IIS 應用程式
裝載在 IIS 中的 WCF 服務會使用與 ASP.NET 2.0 相同的動態編譯模型。就像 ASP.NET,您可以透過好幾種方式,將 IIS 裝載的 WCF 服務的實作程式碼部署到幾個不同的位置,如下所示:
- 做為預先編譯的 .dll 檔,位於全域組件快取 (GAC) 或應用程式的 \bin 目錄中。預先編譯的二進位檔會等到部署了新版本的類別庫才會更新。
- 成為未編譯的來源檔,位於應用程式的 \App_Code 目錄中。位於此目錄的來源檔會在處理應用程式的第一個要求時動態需要。在收到下一個要求時,對 \App_Code 目錄中檔案的任何變更都會導致整個應用程式的回收與重新編譯。
- 成為未編譯的程式碼,直接位於 .svc 檔案中。實作程式碼也可以內嵌於服務的 .svc 檔案中,位於 @ServiceHost 指示詞後。在收到下一個要求時,對內嵌程式碼的任何變更都會導致整個應用程式的回收與重新編譯。
如需 ASP.NET 2.0 編譯模型的詳細資訊,請參閱 ASP.NET 編譯概觀 (本頁面可能為英文)。
設定 WCF 服務
IIS 裝載的 WCF 服務會將其組態儲存在應用程式的 Web.config 檔案中。IIS 裝載的服務會使用與在 IIS 外部裝載的 WCF 服務相同的組態項目與語法。然而,IIS 裝載環境具備了下列特殊限制:
- IIS 裝載服務的基底位址。
- 在 IIS 外部裝載 WCF 服務的應用程式可以將基底位址 URI 集合傳送至 ServiceHost 建構函式,或是提供服務組態中的 <host> 項目,藉此來控制所裝載的服務基底位址。IIS 所裝載的服務無法控制自己的基底位址;IIS 裝載服務的基底位址就是所屬 .svc 檔案的位址。
IIS 裝載服務的端點位址
透過 IIS 裝載時,端點位址一律視為相對於 .svc 檔案 (用來代表服務) 的位址。例如,如果 WCF 服務的起始位址為包含下列端點組態的 https://localhost/Application1/MyService.svc。
<endpoint address=”anotherEndpoint” … />
這會提供可以透過 "https://localhost/Application1/MyService.svc/anotherEndpoint" 抵達的端點。
同理,使用空字串當成相對位址的端點組態項目也會提供可透過 https://localhost/Application1/MyService.svc (亦即基底位址) 抵達的端點。
<endpoint address=”” … />
請務必針對 IIS 裝載服務端點使用相對端點位址。如果端點位址並未指向 IIS 應用程式 (負責裝載會公開端點的服務),則提供完整的端點位址 (例如,https://localhost/MyService.svc) 可能會在部署服務時導致錯誤。針對裝載的服務使用相對端點位址可以避免這些潛在的衝突。
可用的傳輸
IIS 5.1 和 IIS 6.0 所裝載的 WCF 服務僅限於使用 HTTP 通訊。在這些 IIS 平台上,設定裝載的服務來使用非 HTTP 繫結會在服務啟動期間導致錯誤。在 IIS 7.0 上,支援的傳輸包括 HTTP、Net.TCP、Net.Pipe、Net.MSMQ,和 msmq.formatname,以便提供與現有 MSMQ 應用程式的回溯相容性。
HTTP 傳輸安全性
IIS 裝載的 WCF 服務可以利用 HTTP 傳輸安全性 (例如,使用基本、摘要式與 Windows 整合式驗證的 HTTPS 和 HTTP 驗證配置),只要包含服務的 IIS 虛擬目錄支援這些設定即可。裝載端點繫結上的 HTTP 傳輸安全性設定必須符合包含該設定之 IIS 虛擬目錄上的傳輸安全性設定。
例如,設定為使用 HTTP 摘要式驗證的 WCF 端點必須駐留在同時設定為允許使用 HTTP 摘要式驗證的 IIS 虛擬目錄中。如果 IIS 設定與 WCF 端點設定組合不相符,會在服務啟動期間導致錯誤。