Базовая служба AJAX

В примере SimpleAjaxService показано, как использовать Windows Communication Foundation (WCF) для создания базовой службы ASP.NET асинхронной службы JavaScript и XML (AJAX), к которым можно получить доступ с помощью кода JavaScript из клиента веб-браузера. Служба использует WebGetAttribute атрибут, чтобы убедиться, что служба отвечает на HTTP-запросы GET и настроена для использования формата данных нотации объектов JavaScript (JSON) для ответов.

Поддержка AJAX в WCF оптимизирована для использования с ASP.NET AJAX с помощью ScriptManager элемента управления. Пример использования WCF с ASP.NET AJAX см. в примерах AJAX.

Замечание

Инструкции по настройке и сборке этого примера находятся в конце этого раздела.

В следующем коде атрибут 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-файла. Это означает, что адрес службы не имеет http://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. Чтобы вызвать службу, перейдите http://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;
}