Compartir vía


Ejemplo de WebContentTypeMapper

En el ejemplo WebContentTypeMapper se muestra cómo asignar nuevos tipos de contenido a formatos de cuerpo de mensaje de Windows Communication Foundation (WCF).

El WebHttpEndpoint elemento conecta el codificador de mensajes web, que permite a WCF recibir mensajes binarios JSON, XML o sin formato en el mismo punto de conexión. El codificador determina el formato del cuerpo del mensaje examinando el tipo de contenido HTTP de la solicitud. En este ejemplo se presenta la clase WebContentTypeMapper, que permite al usuario controlar la asignación entre el tipo de contenido y el formato del cuerpo.

WCF proporciona un conjunto de mapeos predeterminados para los tipos de contenido. Por ejemplo, application/json se asigna a JSON y text/xml se asigna a XML. Cualquier tipo de contenido que no está asignado a JSON o a XML, está asignado al formato binario sin formato.

En algunos escenarios (por ejemplo, APIs de tipo push), el desarrollador del servicio no puede controlar el tipo de contenido devuelto por el cliente. Por ejemplo, los clientes pueden devolver JSON como text/javascript en lugar de application/json. En este caso, el desarrollador del servicio debe proporcionar un tipo que derive de WebContentTypeMapper para manejar correctamente el tipo de contenido especificado, como se muestra en el siguiente código de ejemplo.

public class JsonContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat
               GetMessageFormatForContentType(string contentType)
    {
        if (contentType == "text/javascript")
        {
            return WebContentFormat.Json;
        }
        else
        {
            return WebContentFormat.Default;
        }
    }
}

El tipo debe invalidar el GetMessageFormatForContentType(String) método . El método debe evaluar el contentType argumento y devolver uno de los siguientes valores: Json, Xml, Rawo Default. El devolver el Default difiere las asignaciones de codificador del mensaje de web predeterminadas. En el código de ejemplo anterior, el text/javascript tipo de contenido se asigna a JSON y todas las demás asignaciones permanecen sin cambios.

Para emplear la clase JsonContentTypeMapper, utilice lo siguiente en su Web.config:

<system.serviceModel>
  <standardEndpoints>
    <webHttpEndpoint>
      <standardEndpoint name="" contentTypeMapper="Microsoft.Samples.WebContentTypeMapper.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </webHttpEndpoint>
  </standardEndpoints>
</system.serviceModel>

Para comprobar el requisito de usar JsonContentTypeMapper, quite el atributo contentTypeMapper del archivo de configuración anterior. La página de cliente no se puede cargar al intentar usar text/javascript para enviar contenido JSON.

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Compile la solución WebContentTypeMapperSample.sln tal y como se describe en Creación de ejemplos de Windows Communication Foundation.

  3. Vaya a http://localhost/ServiceModelSamples/JCTMClientPage.htm (no abra JCTMClientPage.htm en el explorador desde el directorio del proyecto).