共用方式為


部署已裝載網際網路資訊服務的 WCF 服務

開發及部署由 Internet Information Services (IIS) 裝載的 Windows Communication Foundation (WCF) 服務時,需執行下列工作:

  • 確定 IIS、ASP.NET、WCF 和 WCF 啟用元件都已正確安裝及註冊。

  • 建立新的 IIS 應用程式或是重複使用現有的 ASP.NET 應用程式。

  • 建立 WCF 服務的 .svc 檔案。

  • 將服務實作部署到 IIS 應用程式。

  • 設定 WCF 服務。

如需如何建立由 IIS 裝載之 WCF 服務的詳細逐步解說,請參閱操作說明:在 IIS 中裝載 WCF 服務

確定 IIS、ASP.NET 和 WCF 已正確安裝及註冊

您必須安裝 WCF、IIS 和 ASP.NET,IIS 裝載的 WCF 服務才能正確運作。 安裝 WCF (作為 .NET Framework 的一部分)、ASP.NET 和 IIS 的程序會隨著作業系統而不同。 如需安裝 WCF 和 .NET Framework 的詳細資訊,請參閱安裝適用於開發人員的 .NET Framework (部分機器翻譯)。 若要在 Windows 10 上安裝 IIS,請在主控台中開啟 [程式和功能],然後選取 [開啟或關閉 Windows 功能]。 在 [Windows 功能] 中選取 [Internet Information Services],然後選擇 [確定]

Windows Features with IIS highlighted

如需在其他作業系統上安裝 IIS 的指示,請參閱在 Windows Vista 和 Windows 7 上安裝 IIS在 Windows Server 2012 R2 上安裝 IIS 8.5

.NET Framework 的安裝處理序會將 WCF 自動註冊到 IIS 上 (如果 IIS 已存在於機器上)。 如果 IIS 是在 .NET Framework 之後安裝的,則需要採取額外步驟將 WCF 註冊到 IIS 和 ASP.NET。 請依據您的作業系統,採取下列適當的步驟:

建立新的 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 指示詞與單一屬性 ServiceService 屬性值就是服務實作的 Common Language Runtime (CLR) 型別名稱。 基本上,使用此指示詞與使用下列程式碼來建立服務主機是一樣的:

new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );

其他的裝載組態,例如建立服務的基底位址清單,也能夠透過此方式來完成。 您也可以使用自訂的 ServiceHostFactory 來延伸指示詞,以便搭配自訂裝載方案來使用。 裝載 WCF 服務的 IIS 應用程式不負責管理 ServiceHost 執行個體的建立與存留期。 受控 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 服務的基底位址為具有下列端點組態的 http://localhost/Application1/MyService.svc

<endpoint address="anotherEndpoint" />

這會提供可經由 http://localhost/Application1/MyService.svc/anotherEndpoint 連線到的端點。

同理,使用空字串作為相對位址的端點組態元素,也會提供可經由 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.formatname,以便提供與現有 MSMQ 應用程式的回溯相容性。

HTTP 傳輸安全性

IIS 裝載的 WCF 服務可以利用 HTTP 傳輸安全性 (例如,使用基本、摘要式與 Windows 整合式驗證的 HTTPS 和 HTTP 驗證配置),只要包含服務的 IIS 虛擬目錄支援這些設定即可。 裝載端點繫結上的 HTTP 傳輸安全性設定必須符合包含該設定之 IIS 虛擬目錄上的傳輸安全性設定。

例如,設定為使用 HTTP 摘要式驗證的 WCF 端點,必須位於同時設定為允許使用 HTTP 摘要式驗證的 IIS 虛擬目錄中。 如果 IIS 設定與 WCF 端點設定組合的不相符,會在服務啟用期間導致錯誤。

另請參閱