Sdílet prostřednictvím


Ukázka služby AJAX s protokoly JSON a XML

Ukázka XmlAjaxService demonstruje použití technologie Windows Communication Foundation (WCF) k vytvoření asynchronní služby JavaScript a XML (AJAX), která vrací buď JavaScript Object Notation (JSON) nebo XML data. Ke službě AJAX můžete přistupovat pomocí kódu JavaScriptu z klienta webového prohlížeče. Tato ukázka vychází z ukázky základní služby AJAX.

Na rozdíl od ostatních ukázek AJAX tato ukázka nepoužívá ASP.NET AJAX a ScriptManager ovládací prvek. S některými dalšími konfiguracemi lze ke službám WCF AJAX přistupovat z libovolné stránky HTML prostřednictvím JavaScriptu a tento scénář je zde uvedený. Příklad použití WCF s ASP.NET AJAX najdete v tématu Ukázky AJAX.

Tato ukázka ukazuje, jak přepnout typ odpovědi operace mezi JSON a XML. Tato funkce je dostupná bez ohledu na to, jestli je služba nakonfigurovaná tak, aby byla přístupná přes ASP.NET AJAX nebo pomocí stránky klienta HTML/JavaScriptu.

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

Pokud chcete povolit použití non-ASP.NET klientů AJAX, použijte WebServiceHostFactory (nikoli WebScriptServiceHostFactory) v souboru .svc. WebServiceHostFactoryWebHttpEndpoint přidá do služby standardní koncový bod. Koncový bod je nakonfigurovaný na prázdné adrese vzhledem k souboru .svc; to znamená, že adresa služby je http://localhost/ServiceModelSamples/service.svc, bez dalších přípon kromě názvu operace.

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

Následující část v souboru Web.config se dá použít k provedení dalších změn konfigurace koncového bodu. Pokud nepotřebujete žádné další změny, můžete ho odebrat.

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

Výchozí formát dat pro WebHttpEndpoint XML, zatímco výchozí formát dat je WebScriptEndpoint JSON. Další informace naleznete v tématu Vytváření služeb WCF AJAX bez ASP.NET.

Služba v následující ukázce je standardní služba WCF se dvěma operacemi. Obě operace vyžadují Wrapped u atributů styl WebGetAttributeWebInvokeAttribute těla, který je specifický pro webHttp chování a nemá žádný vliv na přepínač formátu dat JSON/XML.

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

Formát odpovědi pro operaci je určen jako XML, což je výchozí nastavení chování webHttp>.< Je však vhodné explicitně zadat formát odpovědi.

Druhá operace používá WebInvokeAttribute atribut a explicitně specifikuje JSON místo XML pro odpověď.

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

Všimněte si, že v obou případech operace vrací komplexní typ, MathResultcož je standardní typ datového kontraktu WCF.

Webová stránka klienta XmlAjaxClientPage.htm obsahuje kód JavaScriptu, který vyvolá jednu z předchozích dvou operací, když uživatel klikne na tlačítko Provést výpočet (vrátit JSON) nebo provést výpočet (vrátit XML) tlačítka na stránce. Kód pro vyvolání služby vytvoří tělo JSON a odešle ho pomocí HTTP POST. Požadavek se vytvoří ručně v JavaScriptu , na rozdíl od ukázky služby BASIC AJAX a dalších ukázek pomocí 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);

Když služba odpoví, zobrazí se odpověď bez dalšího zpracování v textovém poli na stránce. Toto je implementováno pro demonstrační účely, abyste mohli přímo sledovat použité formáty dat XML a JSON.

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

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  2. Sestavte řešení XmlAjaxService.sln, jak je popsáno v části Sestavení ukázek Windows Communication Foundation.

  3. Přejděte na http://localhost/ServiceModelSamples/XmlAjaxClientPage.htm (neotevírejte XmlAjaxClientPage.htm v prohlížeči z adresáře projektu).

Viz také