Condividi tramite


Esempio di WebContentTypeMapper

In questo esempio viene illustrato come eseguire il mapping di nuovi tipi di contenuto sui formati del corpo del messaggio di Windows Communication Foundation (WCF).

Nota

Per poter essere generato ed eseguito, l'esempio richiede che sia installato .NET Framework versione 3.5. Per aprire il progetto e i file della soluzione è necessario Visual Studio 2008.

L'elemento <webHttpBinding> inserisce il codificatore di messaggi Web, che consente a WCF di ricevere JSON, XML o messaggi binari non elaborati sullo stesso endpoint. Il codificatore determina il formato del corpo del messaggio analizzando il tipo di contenuto HTTP della richiesta. Questo esempio presenta la classe WebContentTypeMapper che consente all'utente di controllare il mapping tra il tipo di contenuto e il formato del corpo.

Nota

La procedura di installazione e le istruzioni di generazione per questo esempio si trovano alla fine di questo argomento.

WCF fornisce un insieme di mapping predefiniti per i tipi di contenuto. Ad esempio, application/json esegue il mapping a JSON e text/xml esegue il mapping a XML. Qualsiasi tipo di contenuto per cui non viene eseguito il mapping a JSON o a XML, viene associato al formato binario non elaborato.

In alcuni scenari (ad esempio, API di tipo push), lo sviluppatore del servizio non controlla il tipo di contenuto restituito dal client. Ad esempio, i client potrebbero restituire JSON come text/javascript anziché application/json. In questo caso, lo sviluppatore del servizio deve fornire un tipo che deriva da WebContentTypeMapper per gestire correttamente il tipo di contenuto specificato, come illustrato nell'esempio di codice seguente.

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

È necessario che il tipo esegua l'override del metodo GetMessageFormatForContentType. Il metodo deve valutare l'argomento contentType e restituire uno dei seguenti valori: Json, Xml, Raw, or Default. La restituzione di Default rinvia ai mapping del codificatore di messaggi Web predefiniti. Nel precedente esempio di codice, il tipo di contenuto text/javascript viene associato a JSON e tutti gli altri mapping rimangono immutati.

Per utilizzare la classe JsonContentTypeMapper, l'endpoint deve utilizzare un'associazione personalizzata.

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

Per verificare il requisito per utilizzare JsonContentTypeMapper, sostituire il <webMessageEncoding webContentTypeMapperType= precedente con <webMessageEncoding /> nel file di configurazione. Si verifica un errore durante il caricamento della pagina client quando si tenta di utilizzare text/javascript per inviare contenuto JSON.

Per impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di avere eseguito Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Generare la soluzione WebContentTypeMapperSample.sln come descritto in Generazione degli esempi Windows Communication Foundation.

  3. Spostarsi alla pagina https://localhost/ServiceModelSamples/JCTMClientPage.htm (non aprire JCTMClientPage.htm nel browser dalla directory del progetto).

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.