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

Технология ASP.NET AJAX корпорации Майкрософт позволяет быстро создавать веб-страницы, содержащие широкий набор средств взаимодействия с пользователем с известными элементами пользовательского интерфейса. Эта технология предоставляет библиотеки клиентских сценариев, включающие не зависящие от веб-обозревателя технологии ECMAScript (JavaScript) и динамического HTML (DHTML), и интегрирует их с платформой разработки на базе сервера ASP.NET 2.0. Используя ASP.NET AJAX, можно улучшить взаимодействие веб-приложений с пользователем и повысить их эффективность.

Технология ASP.NET AJAX состоит из библиотек клиентских сценариев и серверных компонентов, интегрированных для обеспечения надежной инфраструктуры разработки. Доступ к службе со страницы ASP.NET: если URL-адрес службы добавляется в элемент управления диспетчера скриптов ASP.NET на странице, операции службы могут вызываться с помощью кода JavaScript, что выглядит абсолютно аналогично обычному вызову функции JavaScript.

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

Если вы используете Visual Studio, вы можете использовать предварительно созданный шаблон для служб WCF с поддержкой AJAX, доступный в диалоговом окне "Добавление нового элемента " при работе с ASP.NET веб-сайтами или веб-приложениями.

Если шаблоны Visual Studio не используются, конечную точку ASP.NET AJAX можно создать двумя указанными ниже способами.

Модель веб-программирования, описанная в обзоре модели программирования ВЕБ-HTTP WCF, может использоваться с ASP.NET службами AJAX. В частности:

  • Для выбора команд HTTP GET и HTTP POST можно использовать атрибуты WebGetAttribute и WebInvokeAttribute. При правильном применении это может существенно повысить производительность приложения. Дополнительные сведения см. в разделе "Практическое руководство. Выбор между HTTP POST и HTTP GET-запросами для ASP.NET конечных точек AJAX".

  • Чтобы вынудить службу возвращать XML-данные вместо нотации объекта JavaScript (JSON) по умолчанию, можно применить свойства ResponseFormat и ResponseFormat. При использовании этой возможности с инфраструктурой ASP.NET AJAX клиент JavaScript будет принимать DOM-объект XML.

    Предупреждение

    Для правильной работы необходимо с помощью операции задать тип содержимого text/xml. В противном случае клиент JavaScript будет принимать строку, содержащую XML вместо DOM-объекта XML.

    В следующем примере показана операция, возвращающая XML-данные с типом содержимого, настроенным соответствующим образом.

    [OperationContract, WebGet(ResponseFormat=WebMessageFormat.Xml)]
    public XElement GetData()
    {
        XElement x;
        //Get some data here...
    
        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        return x;
    }
    
  • Если требуется совместимость с ASP.NET AJAX, никакие другие свойства в атрибутах WebGetAttribute и WebInvokeAttribute изменять нельзя. Можно использовать другие аспекты модели веб-программирования, пока не нарушены соглашения о вызовах ASP.NET AJAX.

Более сложные сценарии требуют получения дополнительных сведений о поддержке AJAX в WCF:

  • Сведения о том, как данные передаются между клиентом страницы AJAX и службой WCF с помощью JavaScript, а также подробные сведения о том, как платформа .NET Framework типы сопоставляются с типами JavaScript, см. в статье "Поддержка json и других форматов передачи данных".

  • чтобы воспользоваться преимуществами возможностей ASP.NET, например проверкой подлинности на основе URL-адреса и доступом к данным сеансов ASP.NET, можно включить режим совместимости с ASP.NET с использованием конфигурации.

Конечные точки AJAX в WCF могут использоваться даже без ASP.NET платформы AJAX. Для этого требуется понимание архитектуры поддержки поддержки поддержки AJAX в WCF. Обсуждение этой архитектуры см. в статье WCF Web Http Programming Object Model. Пример кода, демонстрирующий этот подход, см. в статье AJAX Service with JSON and XML.

См. также