WebContentTypeMapper — przykład

W przykładzie WebContentTypeMapper pokazano, jak mapować nowe typy zawartości na formaty treści komunikatów programu Windows Communication Foundation (WCF).

Element WebHttpEndpoint podłącza koder komunikatów sieci Web, który umożliwia usłudze WCF odbieranie komunikatów binarnych JSON, XML lub nieprzetworzonych komunikatów binarnych w tym samym punkcie końcowym. Koder określa format treści komunikatu, sprawdzając typ zawartości HTTP żądania. W tym przykładzie przedstawiono klasę WebContentTypeMapper , która umożliwia użytkownikowi kontrolowanie mapowania między typem zawartości a formatem treści.

Program WCF udostępnia zestaw domyślnych mapowań dla typów zawartości. Na przykład application/json mapuje na format JSON i text/xml mapuje na xml. Każdy typ zawartości, który nie jest mapowany na format JSON lub XML, jest mapowany na nieprzetworzone formaty binarne.

W niektórych scenariuszach (na przykład interfejsy API w stylu wypychania) deweloper usługi nie kontroluje typu zawartości zwracanej przez klienta. Na przykład klienci mogą zwracać kod JSON jako text/javascript zamiast application/json. W takim przypadku deweloper usługi musi podać typ, który pochodzi z WebContentTypeMapper , aby poprawnie obsłużyć dany typ zawartości, jak pokazano w poniższym przykładowym kodzie.

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

Typ musi zastąpić metodę GetMessageFormatForContentType(String) . Metoda musi ocenić contentType argument i zwrócić jedną z następujących wartości: Json, , XmlRawlub Default. Zwracanie Default defers do domyślnych mapowań kodera komunikatów sieci Web. W poprzednim przykładowym kodzie text/javascript typ zawartości jest mapowany na kod JSON, a wszystkie inne mapowania pozostają niezmienione.

Aby użyć JsonContentTypeMapper klasy, użyj następującej wartości w pliku 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>

Aby sprawdzić wymaganie dotyczące używania atrybutu JsonContentTypeMapper, usuń atrybut contentTypeMapper z powyższego pliku konfiguracji. Nie można załadować strony klienta podczas próby text/javascript wysłania zawartości JSON.

Aby skonfigurować, skompilować i uruchomić przykład

  1. Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.

  2. Skompiluj rozwiązanie WebContentTypeMapperSample.sln zgodnie z opisem w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  3. Przejdź do http://localhost/ServiceModelSamples/JCTMClientPage.htm adresu (nie otwieraj JCTMClientPage.htm w przeglądarce z poziomu katalogu projektu).