Образец службы AJAX с JSON и XML
Данный образец демонстрирует использование Windows Communication Foundation (WCF) для создания служб асинхронных сценариев JavaScript и XML (AJAX), возвращающих нотацию объектов JavaScript (JSON) или XML-данные. Обращаться к службе AJAX можно с помощью кода JavaScript из клиента на основе веб-обозревателя. Этот образец построен на основе образца Базовая служба AJAX.
В отличие от других образцов AJAX, в данном образце не используется ASP.NET AJAX и управление ScriptManager. С помощью дополнительной настройки доступ к службам AJAX WCF можно получить с любой HTML-страницы посредством JavaScript. В данном разделе показан данный сценарий. Пример использования WCF с ASP.NET AJAX см. в разделе AJAX Samples.
В данном разделе показано переключение типа отклика операции между JSON и XML. Данная функциональность доступна независимо от того, настроена служба для доступа через клиентскую страницу ASP.NET AJAX или через HTML/JavaScript.
Примечание |
---|
Процедура настройки и инструкции по построению для этого образца приведены в конце этого раздела. |
Чтобы включить использование клиентов, не являющихся ASP.NET AJAX, используйте WebServiceHostFactory (не WebScriptServiceHostFactory) в SVC-файле. WebServiceHostFactory добавляет WebHttpEndpoint стандартную конечную точку в службу. Конечная точка настраивается в пустом адресе, который является относительным для SVC-файла; это означает, что адресом службы является https://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, в то время как форматом данных по умолчанию для for T:System.ServiceModel.Description.WebScriptEndpoint является JSON. Дополнительные сведения см. в разделе Создание служб WCF AJAX без использования ASP.NET.
Служба в следующем образце является стандартной службой WCF с двумя операциями. Обе операции требуют использования основного стиля Wrapped в WebGetAttribute или атрибутов WebInvokeAttribute, которые относятся к поведению webHttp и не влияют на переключение формата данных 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, вызывающий одну из двух предшествующих операций, когда пользователь нажимает кнопки Выполнить расчет (возвратить JSON) или Выполнить расчет (возвратить 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;
}
}
Примечание |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\WF_WCF_Samples
Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.
<диск_установки>:\WF_WCF_Samples\WCF\Basic\AJAX\XmlAjaxService
|
Настройка, построение и выполнение образца
Убедитесь, что выполнена процедура, описанная в разделе Процедура однократной настройки образцов Windows Communication Foundation.
Выполните построение решения XmlAjaxService.sln, как описано в разделе Построение образцов Windows Communication Foundation.
Перейдите к странице https://localhost/ServiceModelSamples/XmlAjaxClientPage.htm (не открывайте страницу XmlAjaxClientPage.htm в веб-обозрвеателе из каталога проекта).