Criando serviços do WCF para o AJAX ASP.NET

O Microsoft ASP.NET AJAX permite criar rapidamente páginas da Web que incluem uma experiência avançada do usuário com elementos de interface do usuário responsivos e familiares. O ASP.NET AJAX fornece bibliotecas de script de cliente que incorporam tecnologias ECMAScript (JavaScript) e HTML dinâmico (DHTML) e as integra à plataforma de desenvolvimento baseada em servidor ASP.NET 2.0. Usando o ASP.NET AJAX, você pode melhorar a experiência do usuário e a eficiência de seus aplicativos Web.

O ASP.NET AJAX consiste em bibliotecas de script do cliente e de componentes de servidor integrados para fornecer uma estrutura de desenvolvimento robusta. Para acessar um serviço de uma página ASP.NET: uma vez que a URL de serviço é adicionada ao controle ASP.NET Script Manager na página, as operações de serviço podem ser invocadas usando o código JavaScript que se parece exatamente com uma chamada de função JavaScript regular.

A maioria dos serviços do WCF (Windows Communication Foundation) pode ser exposta como um serviço compatível com ASP.NET AJAX adicionando um ponto de extremidade ASP.NET AJAX apropriado.

Se estiver usando o Visual Studio, você poderá usar um modelo pré-criado para serviços WCF habilitados para AJAX, disponíveis na caixa de diálogo Adicionar novo item ao trabalhar com Sites ASP.NET ou Aplicativos Web.

Se você não estiver usando os modelos do Visual Studio, há duas maneiras de criar um ponto de extremidade ASP.NET AJAX:

O modelo de programação web descrito na Visão geral do modelo de programação HTTP da Web do WCF pode ser usado com serviços do ASP.NET AJAX. Especificamente:

  • Você pode usar os atributos WebGetAttribute e WebInvokeAttribute para selecionar entre os verbos HTTP GET e HTTP POST. Se usado corretamente, pode melhorar significativamente o desempenho do aplicativo. Para obter mais informações, consulte Como escolher entre solicitações HTTP POST e HTTP GET para pontos de extremidade ASP.NET AJAX.

  • Você pode usar as propriedades ResponseFormat e ResponseFormat para fazer com que seu serviço retorne dados XML em vez do JSON (JavaScript Object Notation) padrão. Fazer isso com a estrutura ASP.NET AJAX faz com que o cliente JavaScript receba um objeto XML DOM.

    Aviso

    Sua operação deve definir o tipo de conteúdo como texto/xml para que isso funcione. Caso contrário, o cliente JavaScript receberá uma cadeia de caracteres contendo o XML em vez de um objeto XML DOM.

    Veja a seguir um exemplo de uma operação que retorna dados XML com o tipo de conteúdo definido adequadamente:

    [OperationContract, WebGet(ResponseFormat=WebMessageFormat.Xml)]
    public XElement GetData()
    {
        XElement x;
        //Get some data here...
    
        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        return x;
    }
    
  • Nenhuma outra propriedade nos atributos WebGetAttribute e WebInvokeAttribute pode ser alterada se a compatibilidade com ASP.NET AJAX for necessária. Outros aspectos do modelo de programação da Web podem ser usados desde que as convenções de chamada ASP.NET AJAX não sejam violadas.

Cenários mais avançados exigem alguns detalhes adicionais do suporte do AJAX no WCF:

  • Para entender como os dados são transferidos entre um cliente de página AJAX e um serviço WCF usando JavaScript e para obter detalhes sobre como os tipos de .NET Framework são mapeados para tipos JavaScript, consulte Suporte para JSON e outros formatos de transferência de dados.

  • Para aproveitar os recursos do ASP.NET, por exemplo, autenticação baseada em URL e acessar as informações da sessão ASP.NET, convém habilitar o modo de compatibilidade ASP.NET por meio de configuração.

Os pontos de extremidade AJAX no WCF podem até ser consumidos sem a estrutura ASP.NET AJAX. Isso requer uma compreensão da arquitetura de suporte do suporte do AJAX no WCF. Para ler uma discussão sobre essa arquitetura, consulte Modelo de objeto de programação HTTP da Web do WCF. Para obter um exemplo de código que demonstre essa abordagem, consulte Serviço AJAX com JSON e XML.

Confira também