Condividi tramite


Esempio di WebContentTypeMapper

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

L'elemento WebHttpEndpoint si collega al codificatore di messaggi Web, che consente a WCF di ricevere messaggi binari JSON, XML o non elaborati nello stesso endpoint. Il codificatore determina il formato del corpo del messaggio esaminando il tipo di contenuto HTTP della richiesta. In questo esempio viene introdotta la WebContentTypeMapper classe , 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 non mappato a JSON o XML viene mappato 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 nel codice di esempio seguente.

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

Il tipo deve eseguire l'override del metodo GetMessageFormatForContentType(String). Il metodo deve valutare l'argomento contentType e restituire uno dei valori seguenti: Json, Xml, Rawo Default. Restituendo Default utilizza le associazioni predefinite del codificatore di messaggi Web. Nel codice di esempio precedente il text/javascript tipo di contenuto viene mappato a JSON e tutti gli altri mapping rimangono invariati.

Per usare la JsonContentTypeMapper classe , usare quanto segue nel 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>

Per verificare il requisito per l'uso di JsonContentTypeMapper, rimuovere l'attributo contentTypeMapper dal file di configurazione precedente. Il caricamento della pagina client non riesce quando si tenta di usare text/javascript per inviare contenuto JSON.

Per configurare, compilare ed eseguire l'esempio

  1. Assicurati di aver eseguito la procedura di installazione di One-Time per gli esempi di Windows Communication Foundation.

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

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