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, MathResult
což 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
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Sestavte řešení XmlAjaxService.sln, jak je popsáno v části Sestavení ukázek Windows Communication Foundation.
Přejděte na
http://localhost/ServiceModelSamples/XmlAjaxClientPage.htm
(neotevírejte XmlAjaxClientPage.htm v prohlížeči z adresáře projektu).