Windows Communication Foundation 的新功能

本主題討論 Windows Communication Foundation (WCF) 中的新功能。

以組態為基礎的啟動

一般來說,在 Internet Information Services (IIS) 或 Windows Process Activation Service (WAS) 底下裝載 Windows Communication Foundation (WCF) 服務時,您必須提供 .svc 檔案。 .svc 檔案包含服務名稱和選擇性自訂服務主機處理站。 此額外的檔案會增加管理能力的負荷。 以組態為基礎的啟動功能可免除 .svc 檔案的需求以及關聯的負荷。 如需詳細資訊,請參閱 在 IIS 與 WAS 中以組態為基礎的啟動, 以組態為基礎的啟動.

System.Web.Routing 整合

在 IIS 中裝載 Windows Communication Foundation (WCF) 服務時,您可在虛擬目錄中放置 .svc 檔案。 此 .svc 檔案會指定要使用的服務主機處理站,以及實作服務的類別。 向服務進行要求時,您可在 URI 中指定 .svc 檔案,例如:https://contoso.com/EmployeeServce.svc。 對於撰寫 REST 服務的程式設計人員而言,此類型的 URI 不是最佳的方法。 REST 服務的 URI 會指定特定資源,且一般來說沒有任何擴充。 System.Web.Routing 整合功能可讓您裝載 WCF 服務,該服務不需要擴充即可回應 URI。 如需詳細資訊,請參閱 System.Web.Routing 整合, SystemWebRouting 整合範例.

多重 IIS 網站繫結支援

在網際網路資訊服務 (IIS) 7.0 之下裝載 Windows Communication Foundation (WCF) 服務時,您可能需要提供在相同網站使用相同通訊協定的多個基底位址。 這樣可讓相同的服務回應數個不同的 URI。 當您要裝載在 https://www.contoso.comhttps://contoso.com 接聽的服務時,這種方式就會很有用。 當您所建立的服務具有內部使用者基底位址,同時具有內部使用者個別基底位址時,也適用此方式。 如需詳細資訊,請參閱 支援多重 IIS 網站繫結,

路由服務

「路由服務」是一種泛型 SOAP 媒介,可做為訊息路由器。 路由服務的核心功能是可根據訊息內容傳送訊息的能力,這可讓訊息根據訊息 (不論是標頭或訊息主體) 內部本身的值轉送至用戶端端點。 如需詳細資訊,請參閱 路由, 路由服務 .

支援 WS-Discovery

「服務探索」功能可讓用戶端應用程式使用 WS-Discovery,以可互通的方式,在執行階段中動態探索位址。 WS-Discovery 規格會透過多點傳送 (ad hoc) 和單點傳送 (利用網路資源),建立執行輕量服務探索所需之訊息交換模式 (MEP) 的概要。 如需詳細資訊,請參閱 WCF 探索, 探索 (範例).

標準端點

標準端點是預先定義的端點,其中包含一個或多個固定的屬性 (位址、繫結、合約)。 例如,所有中繼資料交換端點皆指定 IMetadataExchange 做為它們的合約,因此開發人員不需指定合約。 所以標準 MEX 端點有固定的 IMetadataExchange 合約。 如需詳細資訊,請參閱 標準端點, .

工作流程服務

這一系列的訊息活動簡介,有助於協助您更輕鬆地實作可傳送和接收資料的工作流程。 這些訊息活動可讓您建立複雜訊息交換模式的模型,該模式可跳脫出傳統的傳送/接收或 RPC 式方法引動。 如需詳細資訊,請參閱 工作流程服務, Services, Services.

目標 Framework 屬性

目標 Framework 屬性是用來指定 .NET Framework 版本,裝載在 IIS 或 WAS 中的應用程式會將該版本做為目標。 它可讓您使用 Visual Studio 建立以 .NET Framework 2.0、3.5 或 4 為目標的應用程式。 它是 <compilation> 標記中的屬性集,該標記位於應用程式的 Web.config 檔案中,如下列範例所示。

<compilation debug="false"
        targetFramework="4.0">

        <assemblies>
          <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
          <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
          <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        </assemblies>

      </compilation>

當裝載在 IIS 或 WAS 中的應用程式以未安裝的 .NET Framework 版本做為目標時,便會擲回例外,以說明此問題。 如果沒有在應用程式的 Web.config 檔案中指定目標 Framework Moniker,在 IIS 設定的應用程式集區版本便會推斷值。

由於此項新功能的緣故,如果您嘗試在執行 .NET Framework 4 上的主機裝載以 .NET Framework 3.5 撰寫的 WCF 服務,可能會看見 ProtocolException,包含下列文字:

未處理的例外狀況: System.ServiceModel.ProtocolException: 回應訊息的內容類型文字/html; 字元集=utf-8 與繫結 (應用程式/soap+xml; 字元集=utf-8) 的內容類型不符。 如果使用自訂編碼器,請確定已正確實作 IsContentTypeSupported 方法。 回應的前 1024 個位元為: '<html>    <head>        <title> 應用程式網域或應用程式集區目前執行的版本為 .NET Framework 4 或更新版本。 如果此 Web 應用程式的 IIS 設定已設為 4.0 或更新版本,或您正在使用 ASP.NET Web 程式開發伺服器 4.0 或更新版本,就會發生此問題。 此 Web 應用程式之 Web.config 檔案中的 &lt;compilation&gt; 項目未包含此 .NET Framework 版本所需的必要 'targetFrameworkMoniker' 屬性 (例如,'&lt;compilation targetFrameworkMoniker=&quot;.NETFramework,Version=v4.0&quot;&gt;')。 請使用此屬性更新 Web.config 檔案,或設定 Web 應用程式使用其他版本的 .NET Framework。</title>...

由於 IIS 在其中執行的應用程式網域是執行 .NET Framework 4,而 WCF 服務預期會在 .NET Framework 3.5 底下執行,因此會發生此錯誤。如需詳細資訊如何修正此問題的詳細資訊,請參閱 HOW TO:在 .NET Framework 4 下執行的 IIS 中,裝載以 .NET Framework 3.5 寫入的 WCF 服務

WCF REST

快取

.NET Framework 4 可讓您使用宣告式快取機制,該機制已可在 WCF REST 服務的 ASP.NET 中使用。 這可讓您快取來自 WCF REST 服務作業的回應。 當使用者傳送 HTTP GET 至您設為快取的服務時,ASP.NET 會傳回快取的回應,且不會呼叫服務方法。 當快取逾期後,下次使用者傳送 HTTP GET 時,會呼叫您的服務方法且再次快取回應。

.NET Framework 4 也可讓您實作條件式 HTTP GET 快取。 在 REST 案例中,條件式 HTTP GET 通常是由服務所使用,以實作智慧型 HTTP 快取,如 HTTP 規格 (英文) 中所述。 如需詳細資訊,請參閱 WCF Web HTTP 服務的快取支援, Caching and Automatic Help Page.

格式支援

WCF Web HTTP 程式設計模型可讓您動態決定傳回回應之服務作業的最佳格式。回應可根據接受標頭自動設為 XML 和 JSON。 已加入 Helper API 並以程式設計方式設定作業的格式。 如需詳細資訊,請參閱 WCF Web HTTP 格式化, 自動格式選取, 進階格式選取.

HTTP REST 錯誤處理

WCF Web HTTP 錯誤處理可以傳回 WCF REST 服務產生的錯誤,除了明確指定 HTTP 狀態碼之外,也會使用與作業相同的格式 (例如 XML 或 JSON) 傳回錯誤詳細資料。 如需詳細資訊,請參閱 WCF Web HTTP 錯誤處理, .

部署功能

執行服務所需的組態已經過簡化,且已引入新的標準端點以進一步簡化服務組態。如需詳細資訊新的簡化組態的詳細資訊,請參閱簡化的組態。如需詳細資訊標準端點的詳細資訊,請參閱標準端點

在 IIS 中裝載 Windows Communication Foundation (WCF) 服務時,您可在虛擬目錄中放置 .svc 檔案。 此 .svc 檔案會指定要使用的服務主機處理站,以及實作服務的類別。 向服務進行要求時,您可在 URI 中指定 .svc 檔案,例如:https://contoso.com/EmployeeServce.svc。 對於撰寫 REST 服務的程式設計人員而言,此類型的 URI 不是最佳的方法。 REST 服務的 URI 會指定特定資源,且一般來說沒有任何擴充。 System.Web.Routing 整合功能可讓您裝載 WCF REST 服務,該服務不需要擴充即可回應 URI。 如需詳細資訊,請參閱 System.Web.Routing 整合.

跨網域 JavaScript

JSON Padding (JSONP) 是一種啟用 Web 瀏覽器跨網站指令碼支援的機制。 JSONP 是針對 Web 瀏覽器的功能而設計的,可從不同於目前載入文件擷取來源的網站載入指令碼。 這項機制的工作原理是以使用者定義的回呼函式名稱填補 JSON 承載,例如:

callback({ “a” = \“b\” });

在上述範例中,JSON 承載 ({“a” = \”b\”}) 包裝在函式呼叫 (callback) 中。 回呼函式已在目前的網頁中定義。 JSONP 回應的內容型別是 “application/javascript”。 如需詳細資訊,請參閱 JSONP.

WCF REST 服務說明頁面

.NET Framework 版本 4 會為 WCF REST 服務提供自動說明頁面。 此說明頁面會列出每項作業、要求與回應格式和結構描述的說明。 如需詳細資訊,請參閱 WCF Web HTTP 服務說明網頁, Caching and Automatic Help Page.