Поделиться через


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

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

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

Создание службы AJAX WCF выполняется за три этапа.

  • Создание конечной точки 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

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

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

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

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