Esempio di WebContentTypeMapperWebContentTypeMapper Sample

In questo esempio viene illustrato come eseguire il mapping di nuovi tipi di contenuto a formati del corpo del messaggio di Windows Communication Foundation (WCF).This sample demonstrates how to map new content types to Windows Communication Foundation (WCF) message body formats.

Il WebHttpEndpoint elemento inserisce di codificatore di messaggi Web, che consente a WCF ricevere JSON, XML o messaggi binari non elaborati sullo stesso endpoint.The WebHttpEndpoint element plugs in the Web message encoder, which allows WCF to receive JSON, XML, or raw binary messages at the same endpoint. Il codificatore determina il formato del corpo del messaggio analizzando il tipo di contenuto HTTP della richiesta.The encoder determines the body format of the message by looking at the HTTP content-type of the request. 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.This sample introduces the WebContentTypeMapper class, which allows the user to control the mapping between content type and body format.

WCF fornisce un set di mapping predefiniti per i tipi di contenuto.WCF provides a set of default mappings for content types. Ad esempio, application/json esegue il mapping a JSON e text/xml esegue il mapping a XML.For example, application/json maps to JSON and text/xml maps to XML. Qualsiasi tipo di contenuto per cui non viene eseguito il mapping a JSON o a XML, viene associato al formato binario non elaborato.Any content type that is not mapped to JSON or XML is mapped to raw binary format.

In alcuni scenari (ad esempio, API di tipo push), lo sviluppatore del servizio non controlla il tipo di contenuto restituito dal client.In some scenarios (for example, push-style APIs), the service developer does not control the content type returned by the client. Ad esempio, i client potrebbero restituire JSON come text/javascript anziché application/json.For example, clients might return JSON as text/javascript instead of 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.In this case, the service developer must provide a type that derives from WebContentTypeMapper to handle the given content type correctly, as shown in the following sample code.

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).The type must override the GetMessageFormatForContentType(String) method. Il metodo deve valutare l'argomento contentType e restituire uno dei seguenti valori: Json, Xml, Raw, or Default.The method must evaluate the contentType argument and return one of the following values: Json, Xml, Raw, or Default. La restituzione di Default rinvia ai mapping del codificatore di messaggi Web predefiniti.Returning Default defers to the default Web message encoder mappings. Nell'esempio di codice precedente il tipo di contenuto text/javascript viene associato a JSON e tutti gli altri mapping rimangono immutati.In the previous sample code, the text/javascript content type is mapped to JSON, and all other mappings remain unchanged.

Per utilizzare la classe JsonContentTypeMapper, modificare il file Web.config nel modo seguente:To use the JsonContentTypeMapper class, use the following in your 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'utilizzo di JsonContentTypeMapper, rimuovere l'attributo contentTypeMapper dal file di configurazione illustrato in precedenza.To verify the requirement for using the JsonContentTypeMapper, remove the contentTypeMapper attribute from the above configuration file. Si verifica un errore durante il caricamento della pagina client quando si tenta di utilizzare text/javascript per inviare contenuto JSON.The client page fails to load when attempting to use text/javascript to send JSON content.

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Assicurarsi di avere eseguito la procedura di installazione singola per gli esempi di Windows Communication Foundation.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Compilare la soluzione WebContentTypeMapperSample.sln, come descritto in compilazione degli esempi di Windows Communication Foundation.Build the solution WebContentTypeMapperSample.sln as described in Building the Windows Communication Foundation Samples.

  3. Passare a http://localhost/ServiceModelSamples/JCTMClientPage.htm (non aprire Jctmclientpage nel browser dalla directory del progetto).Navigate to http://localhost/ServiceModelSamples/JCTMClientPage.htm (do not open JCTMClientPage.htm in the browser from within the project directory).

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Extensibility\Ajax\WebContentTypeMapper

Vedere ancheSee Also