Creación de servicios AJAX WCF sin ASP.NET

Se puede tener acceso a los servicios AJAX de Windows Communication Foundation (WCF) desde cualquier página web habilitada para JavaScript, sin necesidad de AJAX de ASP.NET. En este tema se describe cómo crear un servicio WCF de este tipo.

Para instrucciones sobre el uso de WCF con ASP.NET, consulte Creación de servicios WCF para AJAX de ASP.NET.

La creación de un servicio AJAX de WCF consta de tres partes:

  • Creación de un extremo de AJAX al que se puede tener acceso desde el explorador.

  • Creación de un contrato de servicios compatible con AJAX.

  • Acceso a servicios de AJAX de WCF.

Creación de un extremo de AJAX

La manera más simple de habilitar la compatibilidad con AJAX en un servicio WCF consiste en utilizar WebServiceHostFactory en el archivo .svc asociado al servicio, como en el ejemplo siguiente.

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

Por otra parte, también puede utilizar la configuración para agregar un punto de conexión de AJAX. Utilice el WebHttpBinding en el punto de conexión de servicio y configure ese punto de conexión con WebHttpBehavior, tal y como se muestra en el siguiente fragmento de código.

<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 ver un ejemplo de trabajo, consulte Servicio AJAX con JSON y XML.

Creación de un contrato de servicios compatible con AJAX

De forma predeterminada, los contratos de servicios expuestos sobre un extremo de AJAX devuelven los datos en formato XML. Asimismo, de forma predeterminada, se obtiene acceso a las operaciones de servicio a través de solicitudes HTTP POST a direcciones URL que incluyen la dirección del punto de conexión seguidas por el nombre de operación, como se muestra en el siguiente ejemplo.

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

La operación es accesible mediante una solicitud HTTP POST a http://serviceaddress/endpointaddress/GetCities y devuelve un mensaje XML.

Puede utilizar el Modelo de programación web completo para personalizar estos aspectos básicos. Por ejemplo, puede usar los atributos WebGetAttribute o WebInvokeAttribute para controlar el verbo HTTP al que responde la operación o usar la propiedad UriTemplate de los atributos respectivos para especificar URIs personalizadas. Para más información, consulte el tema Modelo de programación web HTTP de WCF.

El formato de datos de JSON se utiliza a menudo en los servicios de AJAX. Para crear una operación que devuelva JSON en lugar de XML, establezca la propiedad ResponseFormat (o ResponseFormat) en Json. El tema Serialización JSON autónoma muestra cómo los tipos de .NET integrados y los tipos de contrato de datos se asignan a JSON.

Normalmente, las solicitudes y respuestas de JSON constan de un solo elemento. En la operación GetCities anterior, la solicitud se parece a la siguiente instrucción.

"na"  

La respuesta a esa solicitud se parece a la siguiente instrucción.

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

Si la operación toma un parámetro adicional, el estilo de la solicitud debe ser ajustado para ajustar ambos parámetros en un objeto JSON único. A continuación se muestra un ejemplo de este mensaje JSON de estilo.

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

El siguiente contrato acepta este mensaje.

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

Acceso a servicios de AJAX

Los puntos de conexión AJAX de WCF siempre aceptan solicitudes JSON y XML.

Las solicitudes HTTP POST con un tipo de contenido de "application/json" se tratan como JSON y aquellas con un tipo de contenido que indican XML (por ejemplo, "text/xml") se tratan como XML.

Las solicitudes HTTP GET contienen todos los parámetros de solicitud en la propia dirección URL.

Depende del usuario decidir cómo crear la solicitud HTTP en el punto de conexión. Asimismo, el usuario tiene control completo sobre la construcción del JSON que forma el cuerpo de la solicitud. Para ver un ejemplo de cómo crear una solicitud desde JavaScript, consulte Servicio AJAX con JSON y XML.