Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере XmlAjaxService показано, как использовать Windows Communication Foundation (WCF) для создания асинхронной службы JavaScript и XML (AJAX), которая возвращает нотацию объектов JavaScript (JSON) или XML-данные. Доступ к службе AJAX можно получить с помощью кода JavaScript из клиента веб-браузера. Этот пример основан на примере базовой службы AJAX .
В отличие от других примеров AJAX, этот пример не использует ASP.NET AJAX и ScriptManager элемент управления. При дополнительной настройке службы WCF AJAX можно использовать с любой HTML-страницы с помощью JavaScript, и этот сценарий демонстрируется здесь. Пример использования WCF с ASP.NET AJAX см. в примерах AJAX.
В этом примере показано, как переключить тип отклика между JSON и XML. Эта функция доступна независимо от того, настроена ли служба для доступа с помощью ASP.NET AJAX или клиентской страницы HTML/JavaScript.
Замечание
Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.
Чтобы включить использование клиентов AJAX non-ASP.NET, используйте WebServiceHostFactory (не WebScriptServiceHostFactory) в SVC-файле.
WebServiceHostFactory добавляет стандартную конечную точку WebHttpEndpoint в службу. Конечная точка настроена по пустому адресу относительно 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. Дополнительные сведения см. в разделе "Создание служб 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, в отличие от примера службы Basic 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;
}
}
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Создайте решение XmlAjaxService.sln, как описано в разделе "Создание примеров Windows Communication Foundation".
Перейдите к
http://localhost/ServiceModelSamples/XmlAjaxClientPage.htm
(не открывайте XmlAjaxClientPage.htm в браузере из каталога проекта).