Criando serviços WCF AJAX sem ASP.NET

Os serviços AJAX do Windows Communication Foundation (WCF) podem ser acessados de qualquer página da Web habilitada para JavaScript, sem a necessidade de ASP.NET AJAX. Este tópico descreve como criar esse serviço WCF.

Para obter instruções sobre como usar o WCF com ASP.NET AJAX, consulte Criando serviços WCF para ASP.NET AJAX.

Há três partes para criar um serviço WCF AJAX:

  • Criação de um ponto de extremidade AJAX que pode ser acessado a partir do navegador.

  • Criação de um contrato de serviço compatível com AJAX.

  • Acesso aos serviços WCF AJAX.

Criando um ponto de extremidade AJAX

A maneira mais básica de habilitar o suporte AJAX em um serviço WCF é usar o WebServiceHostFactory no arquivo .svc associado ao serviço, como no exemplo a seguir.

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

Como alternativa, você também pode usar a configuração para adicionar um ponto de extremidade AJAX. Use o WebHttpBinding no ponto de extremidade do serviço e configure esse ponto de extremidade com o WebHttpBehavior conforme mostrado no trecho de código a seguir.

<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>  

Para obter um exemplo de trabalho, consulte o Serviço AJAX com JSON e XML.

Criando um contrato de serviço compatível com AJAX

Por padrão, os contratos de serviço expostos em um ponto de extremidade AJAX retornam dados no formato XML. Além disso, por padrão, as operações de serviço são acessíveis por meio de solicitações HTTP POST para URLs que incluem o endereço do ponto de extremidade seguido pelo nome da operação, conforme mostrado no exemplo a seguir.

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

Esta operação é acessível usando um HTTP POST para http://serviceaddress/endpointaddress/GetCities e retornar uma mensagem XML.

Você pode usar o Modelo de Programação Web completo para personalizar esses aspetos básicos. Por exemplo, você pode usar os WebGetAttribute atributos ou WebInvokeAttribute para controlar o verbo HTTP ao qual a operação responde ou usar a UriTemplate propriedade desses respetivos atributos para especificar URIs personalizados. Para obter mais informações, consulte o tópico WCF Web HTTP Programming Model .

O formato de dados JSON é frequentemente usado em serviços AJAX. Para criar uma operação que retorna JSON em vez de XML, defina a ResponseFormat propriedade (ou a ResponseFormatpropriedade ) como Json. O tópico Serialização JSON autônoma mostra como os tipos .NET internos e os tipos de contrato de dados são mapeados para JSON.

Normalmente, as solicitações e respostas JSON consistem em apenas um item. Para a operação anterior GetCities , a solicitação é semelhante à instrução a seguir.

"na"  

A resposta a esse pedido é semelhante à seguinte declaração.

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

Se a operação usar um parâmetro extra, o estilo de solicitação deverá ser encapsulado para encapsular ambos os parâmetros em um único objeto JSON. Um exemplo desse estilo de mensagem JSON está no exemplo a seguir.

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

O seguinte contrato aceita esta mensagem.

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

Acessando os serviços AJAX

Os pontos de extremidade WCF AJAX sempre aceitam solicitações JSON e XML.

As solicitações HTTP POST com um tipo de conteúdo de "application/json" são tratadas como JSON, e aquelas com tipo de conteúdo que indicam XML (por exemplo, "text/xml") são tratadas como XML.

As solicitações HTTP GET contêm todos os parâmetros de solicitação na própria URL.

Cabe ao usuário decidir como criar a solicitação HTTP para o ponto de extremidade. Além disso, o usuário tem controle total sobre a construção do JSON que forma o corpo da solicitação. Para obter um exemplo de criação de uma solicitação de JavaScript, consulte o Serviço AJAX com JSON e XML.