Compartir a través de


Creación de servicios AJAX de WCF sin ASP.NET

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

Para obtener instrucciones sobre cómo usar WCF con ASP.NET AJAX, consulte Creación de servicios WCF para ASP.NET AJAX.

Hay tres partes para crear un servicio AJAX de WCF:

  • Creación de un punto de conexión de AJAX al que se puede acceder desde el explorador.

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

  • Acceso a los servicios AJAX de WCF.

Creación de un punto de conexión de AJAX

La manera más básica de habilitar la compatibilidad con AJAX en un servicio WCF es usar en WebServiceHostFactory 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  
%>  

Como alternativa, también puede usar la configuración para agregar un punto de conexión de AJAX. Utiliza el WebHttpBinding en el punto de conexión del servicio y configura ese punto de conexión con el WebHttpBehavior 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 obtener un ejemplo de trabajo, consulte el servicio AJAX con JSON y XML.

Creación de un Contrato de Servicio AJAX-Compatible

De forma predeterminada, los contratos de servicio expuestos a través de un punto de conexión de AJAX devuelven datos en formato XML. Además, de forma predeterminada, las operaciones de servicio son accesibles a través de solicitudes HTTP POST a direcciones URL que incluyen la dirección del punto de conexión seguida del nombre de la operación, como se muestra en el ejemplo siguiente.

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

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

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

El formato de datos JSON se usa a menudo en los servicios de AJAX. Para crear una operación que devuelva JSON en lugar de XML, establezca la propiedad ResponseFormat o la propiedad 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 JSON constan de un solo elemento. Para la operación anterior GetCities, la solicitud se asemeja a la siguiente declaración.

"na"  

La respuesta a esa solicitud es similar a la siguiente declaración.

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

Si la operación toma un parámetro adicional, el estilo de solicitud debe ajustarse para encapsular ambos parámetros en un único objeto JSON. En el ejemplo siguiente 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 los 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 las que tienen 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.

Es necesario que el usuario decida cómo crear la solicitud HTTP al punto de conexión. Además, el usuario tiene control total sobre la construcción del JSON que forma el cuerpo de la solicitud. Para obtener un ejemplo de creación de una solicitud a partir de JavaScript, consulte el servicio AJAX con JSON y XML.