共用方式為


使用 JSON 和 XML 範例的 AJAX 服務

XmlAjaxService 範例示範如何使用 Windows Communication Foundation (WCF) 來建立異步 JavaScript 和 XML (AJAX) 服務,以傳回 JavaScript 物件表示法 (JSON) 或 XML 數據。 您可以從網頁瀏覽器用戶端使用 JavaScript 程式代碼來存取 AJAX 服務。 此範例是以 基本 AJAX 服務 範例為基礎。

與其他 AJAX 範例不同,此範例不會使用 ASP.NET AJAX 和 ScriptManager 控件。 透過一些額外的設定,WCF AJAX 服務可以透過JavaScript從任何HTML頁面存取,此案例如下所示。 如需使用 WCF 搭配 ASP.NET AJAX 的範例,請參閱 AJAX 範例

此範例示範如何在 JSON 和 XML 之間切換作業的回應類型。 不論服務是設定為由 ASP.NET AJAX 或 HTML/JavaScript 用戶端頁面存取,都可以使用此功能。

備註

此範例的安裝程式和建置指示位於本主題結尾。

若要啟用非 ASP.NET AJAX 用戶端,請在 .svc 檔案中使用 WebServiceHostFactory(而不是 WebScriptServiceHostFactory)。 WebServiceHostFactoryWebHttpEndpoint 標準端點新增至服務。 端點是在相對於 .svc 檔案的空地址設定;這表示服務的位址是 http://localhost/ServiceModelSamples/service.svc,除了作業名稱之外,沒有其他後綴。

<%@ServiceHost language="c#" Debug="true" Service="Microsoft.Samples.XmlAjaxService.CalculatorService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

Web.config 中的下一節可用來對端點進行其他組態變更。 如果不需要額外的變更,就可以移除它。

<system.serviceModel>
  <standardEndpoints>
    <webHttpEndpoint>
      <!-- Use this element to configure the endpoint -->
      <standardEndpoint name="" />
    </webHttpEndpoint>
  </standardEndpoints>
</system.serviceModel>

WebHttpEndpoint 的預設數據格式為 XML,而 WebScriptEndpoint 的預設數據格式為 JSON。」 如需詳細資訊,請參閱 建立不含 ASP.NET 的 WCF AJAX 服務

下列範例中的服務是具有兩個作業的標準 WCF 服務。 這兩項作業都需要在WrappedWebGetAttribute屬性上應用WebInvokeAttribute特有的本文樣式,這與 JSON/XML 數據格式的切換無關。

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped)]
MathResult DoMathXml(double n1, double n2);

作業的回應格式會指定為 XML,這是 WebHttp< 行為的預設設定>。 不過,最好明確指定回應格式。

其他操作使用 WebInvokeAttribute 屬性,並明確指定 JSON,而不是 XML 作為回應格式。

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
MathResult DoMathJson(double n1, double n2);

請注意,在這兩種情況下,作業都會傳回複雜類型 , MathResult這是標準的 WCF 數據合約類型。

用戶端網頁 XmlAjaxClientPage.htm 包含 JavaScript 程式代碼,當使用者按下頁面上的 [執行計算] 或 [ 執行 XML] 按鈕時,會叫用上述兩項作業的其中一個。 叫用服務的程式代碼會建構 JSON 主體,並使用 HTTP POST 傳送它。 要求是在 JavaScript 中手動建立,不同於 基本 AJAX 服務 範例,以及其他使用 ASP.NET AJAX 的範例。

// Create HTTP request
var xmlHttp;
// Request instantiation code omitted…
// Result handler code omitted…

// Build the operation URL
var url = "service.svc/ajaxEndpoint/";
url = url + operation;

// Build the body of the JSON message
var body = '{"n1":';
body = body + document.getElementById("num1").value + ',"n2":';
body = body + document.getElementById("num2").value + '}';

// Send the HTTP request
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send(body);

當服務回應時,會在頁面上的文字框中顯示回應,而不會進行任何進一步處理。 這是為了示範目的而實作,可讓您直接觀察所使用的 XML 和 JSON 數據格式。

// Create result handler
xmlHttp.onreadystatechange=function(){
     if(xmlHttp.readyState == 4){
          document.getElementById("result").value = xmlHttp.responseText;
     }
}

要設定、建置和執行範例,請執行以下步驟:

  1. 請確定您已針對 Windows Communication Foundation 範例 執行One-Time 安裝程式。

  2. 建置 Windows Communication Foundation 範例中所述,建置解決方案XmlAjaxService.sln。

  3. 流覽至 http://localhost/ServiceModelSamples/XmlAjaxClientPage.htm (不要從項目目錄在瀏覽器中開啟 XmlAjaxClientPage.htm)。

另請參閱