Базовая служба AJAX
В этом образце показано использование Windows Communication Foundation (WCF) для создания базовой службы асинхронных скриптов JavaScript и XML (AJAX) ASP.NET (службу, которую можно использовать из клиента на основе веб-обозревателя с помощью кода JavaScript). Служба использует атрибут WebGetAttribute, чтобы обеспечить ответы службы на запросы HTTP GET и настройку на использование при ответах формата данных JSON.
Поддержка технологии AJAX в WCF оптимизирована для использования в ASP.NET AJAX с помощью элемента управления ScriptManager. Образец использования WCF с ASP.NET AJAX см. в разделе AJAX Samples.
Примечание |
---|
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела. |
В следующем коде атрибут WebGetAttribute применяется к операции Add
, чтобы гарантировать ответ службы на запросы HTTP GET. Код использует GET в целях упрощения (запрос HTTP GET можно создать в любом веб-обозревателе). GET также можно использовать для обеспечения кэширования. HTTP POST используется по умолчанию в случае отсутствия атрибута WebGetAttribute.
[ServiceContract(Namespace = "SimpleAjaxService")]
public interface ICalculator
{
[WebGet]
double Add(double n1, double n2);
//Other operations omitted…
}
Образец SVC-файла использует WebScriptServiceHostFactory, которая добавляет стандартную конечную точку WebScriptEndpoint к службе. Конечная точка настраивается с пустым адресом относительно SVC-файла. Это означает, что адресом службы будет https://localhost/ServiceModelSamples/service.svc без дополнительных суффиксов, кроме имени операции.
<%@ServiceHost language="C#" Debug="true" Service="Microsoft.Samples.SimpleAjaxService.CalculatorService" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>
WebScriptEndpoint предварительно настраивается таким образом, чтобы служба была доступна с клиентской страницы ASP.NET AJAX. Следующий раздел в Web.config может использоваться для дополнительных изменений конфигурации конечной точки. Если дополнительных изменений не требуется, он может быть удален.
<system.serviceModel>
<standardEndpoints>
<webScriptEndpoint>
<!-- Use this element to configure the endpoint -->
<standardEndpoint name="" />
</webScriptEndpoint>
</standardEndpoints>
</system.serviceModel>
WebScriptEndpoint задает формат данных по умолчанию для службы как JSON вместо XML. Чтобы вызвать службу, перейдите по адресу https://localhost/ServiceModelSamples/service.svc/Add?n1=100&n2=200 после завершения настройки и выполнения шагов, описанных далее в этой теме. Таки функциональные возможности тестирования обеспечиваются за счет запроса HTTP GET.
Клиентская веб-страница SimpleAjaxClientPage.aspx содержит код ASP.NET для вызова службы, когда пользователь нажимает одну из кнопок операций на странице. Элемент управления ScriptManager используется для создания прокси-сервера для службы, доступной через JavaScript.
<asp:ScriptManager ID="ScriptManager" runat="server">
<Services>
<asp:ServiceReference Path="service.svc" />
</Services>
</asp:ScriptManager>
Создается локальный прокси-сервер, и вызываются операции с помощью следующего кода JavaScript.
// Code for extracting arguments n1 and n2 omitted…
// Instantiate a service proxy
var proxy = new SimpleAjaxService.ICalculator();
// Code for selecting operation omitted…
proxy.Add(parseFloat(n1), parseFloat(n2), onSuccess, onFail, null);
Если вызов процедуры завершен успешно, код вызывает обработчик onSuccess
и в текстовом поле показывается результат операции.
function onSuccess(mathResult){
document.getElementById("result").value = mathResult;
}
Примечание |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\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\SimpleAjaxService
|