Создание служб WCF AJAX без использования ASP.NET

Службы AJAX Windows Communication Foundation (WCF) можно получить на любой веб-странице с поддержкой JavaScript, не требуя ASP.NET AJAX. В этом разделе описывается создание такой службы WCF.

Инструкции по использованию WCF с ASP.NET AJAX см. в разделе "Создание служб WCF для ASP.NET AJAX".

Существует три части для создания службы WCF AJAX:

  • Создание конечной точки AJAX, доступ к которой можно получить из браузера.

  • Создание контракта службы, совместимого с технологией AJAX.

  • Доступ к службам AJAX WCF.

Создание конечной точки AJAX

Самый простой способ включить поддержку AJAX в службе WCF — использовать WebServiceHostFactory в SVC-файле, связанном со службой, как показано в следующем примере.

<%ServiceHost
    language=c#  
    Debug="true"  
    Service="Microsoft.Ajax.Samples.CityService"  
    Factory=System.ServiceModel.Activation.WebServiceHostFactory  
%>  

Также для добавления конечной точки AJAX можно использовать конфигурацию. Используйте WebHttpBinding в конечной точке службы и настройте эту конечную точку с помощью WebHttpBehavior, как показано в следующем фрагменте кода.

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="AjaxBehavior">  
          <webHttp/>  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <services>  
      <service name="Microsoft.Ajax.Samples.CityService">  
        <endpoint
          address="ajaxEndpoint"  
          behaviorConfiguration="AjaxBehavior"  
          binding="webHttpBinding"  
          contract="Microsoft.Ajax.Samples.ICityService" />  
      </service>  
    </services>  
  </system.serviceModel>  
</configuration>  

Рабочий пример см. в службе AJAX с json и XML.

Создание контракта службы, совместимого с технологией AJAX

По умолчанию контракты служб, предоставляемые через конечную точку AJAX, возвращают данные в формате XML. Кроме того, по умолчанию доступ к операциям службы предоставляется через HTTP-запросы POST, поступающие в URL-адреса, содержащие адрес конечной точки, после которого следует имя операции, как показано в следующем примере.

[OperationContract]  
string[] GetCities(string firstLetters);  

Эта операция доступна с помощью HTTP POST http://serviceaddress/endpointaddress/GetCities и возврата XML-сообщения.

Можно использовать полную модель веб-программирования, чтобы настроить эти основные аспекты. Например, можно использовать атрибут WebGetAttribute или атрибут WebInvokeAttribute для управления HTTP-командой, на которую отвечает операция, или использовать свойство UriTemplate этих соответствующих атрибутов для указания пользовательских универсальных кодов ресурсов (URI). Дополнительные сведения см. в разделе "Модель программирования ВЕБ-HTTP WCF".

В службах AJAX часто используется формат данных JSON. Чтобы создать операцию, возвращающую JSON вместо XML, присвойте свойству ResponseFormat (или свойству ResponseFormat) значение Json. В разделе сериализации автономного JSON показано, как встроенные типы и типы контрактов данных .NET сопоставляются с JSON.

Обычно запросы и ответы JSON состоят из одного элемента. Для предыдущей операции GetCities запрос выглядит следующим образом.

"na"  

Ответ на этот запрос выглядит следующим образом.

["Nairobi", "Naples", "Nashville"]  

Если операция принимает дополнительный параметр, стиль запроса необходимо поместить в оболочку, чтобы заключить в оболочку оба параметра в одном объекте JSON. Ниже приводится пример такого стиля сообщения JSON.

{"firstLetters": "na", "maxNumber": 2}  

Следующий контракт принимает это сообщение.

[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)]  
[OperationContract]  
string[] GetCities(string firstLetters, int maxNumber);  

Доступ к службам AJAX

Конечные точки WCF AJAX всегда принимают запросы JSON и XML.

HTTP-запросы POST с типом контента application/json обрабатываются как JSON, а те с типом контента, указывающим XML (например, text/xml) обрабатываются как XML.

HTTP-запросы GET содержат все параметры запросов в самом URL-адресе.

Пользователь определяет, как создавать HTTP-запрос в конечную точку. Кроме того, пользователь имеет полный контроль над созданием JSON, формирующим тело запроса. Пример создания запроса из JavaScript см . в службе AJAX с помощью JSON и XML.