Condividi tramite


Esempio di WebContentTypeMapper

Nell'esempio di WebContentTypeMapper viene illustrato come eseguire il mapping dei nuovi tipi di contenuto ai formati del corpo dei messaggi di Windows Communication Foundation (WCF).

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

WCF fornisce un set 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(String). 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. Nell'esempio di codice precedente il tipo di contenuto text/javascript viene associato a JSON e tutti gli altri mapping rimangono immutati.

Per utilizzare la classe JsonContentTypeMapper, modificare il file Web.config nel modo seguente:

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

Per verificare il requisito per l'utilizzo di JsonContentTypeMapper, rimuovere l'attributo contentTypeMapper dal file di configurazione illustrato in precedenza. 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 aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.

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

  3. Passare a http://localhost/ServiceModelSamples/JCTMClientPage.htm (non aprire JCTMClientPage.htm nel browser dall'interno della directory del progetto).