Compartir a través de


Ejemplo de WebContentTypeMapper

Download sample

Este ejemplo muestra cómo asignar los nuevos tipos de contenido a los formatos de cuerpo del mensaje Windows Communication Foundation (WCF).

Nota

En este ejemplo, para generar y ejecutar, es necesario que esté instalado .NET Framework versión 3.5. Para abrir los archivos de solución y proyecto se necesita Visual Studio 2008.

El elemento <webHttpBinding> complementa el codificador del mensaje de Web, que permite aWCF recibir JSON, XML o los mensajes del binario sin formato en el mismo extremo. El codificador determina el formato del cuerpo del mensaje examinando el tipo de contenido del Http de la solicitud. Este ejemplo introduce la clase WebContentTypeMapper, que le permite al usuario controlar la asignación entre el tipo de contenido y formato del cuerpo.

Nota

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

WCF proporciona un conjunto de asignaciones predeterminadas para los tipos de contenido. Por ejemplo, mapas application/json para JSON y mapas text/xml para 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, estilo de inserción API), el programador del servicio no controla el tipo de contenido devuelto por el cliente. Por ejemplo, los clientes podrían devolver JSON como text/javascript en lugar de application/json. En este caso, el programador del servicio debe proporcionar un tipo que deriva de WebContentTypeMapper para administrar correctamente el tipo de contenido determinado, como se muestra en el código de muestra siguiente.

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

El tipo debe reemplazar el método GetMessageFormatForContentType. El método debe evaluar el argumento contentType y devolver uno de los valores siguientes: Json, Xml, Rawo Default. El devolver el Default difiere las asignaciones de codificador del mensaje de Web predeterminadas. En el código muestra anterior, el tipo de contenido text/javascript está asignado a JSON y todas las otras asignaciones siguen estando sin modificar.

Para utilizar la clase JsonContentTypeMapper, el extremo debe utilizar un enlace personalizado.

<customBinding>
    <binding name="JsonMapper">
        <webMessageEncoding webContentTypeMapperType=
"Microsoft.Ajax.Samples.JsonContentTypeMapper, JsonContentTypeMapper, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null" />
        <httpTransport manualAddressing="true" />
    </binding>
</customBinding>

Para comprobar el requisito para utilizar JsonContentTypeMapper, reemplace el <webMessageEncoding webContentTypeMapperType= anterior con sólo <webMessageEncoding /> en el archivo de configuración. La página del cliente no carga al intentar utilizar text/javascript para enviar el contenido de JSON.

Para configurar, generar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

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

  3. Navegue en https://localhost/ServiceModelSamples/JCTMClientPage.htm (no abra JCTMClientPage.htm en el explorador desde dentro del directorio del proyecto).

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.