Beispiel zu WebContentTypeMapper
In diesem Beispiel wird veranschaulicht, wie Windows Communication Foundation (WCF)-Nachrichtentextformaten neue Inhaltstypen zugeordnet werden.
Das WebHttpEndpoint-Element bindet den Webnachrichtenencoder ein, sodass WCF JSON-, XML- oder unformatierte binäre Nachrichten am gleichen Endpunkt empfangen kann. Der Encoder bestimmt das Textformat der Nachricht, indem der HTTP-Inhaltstyp der Anforderung betrachtet wird. In diesem Beispiel wird die WebContentTypeMapper-Klasse eingeführt, mit der der Benutzer die Zuordnung zwischen Inhaltstyp und Textformat steuern kann.
WCF stellt einen Satz von Standardzuordnungen für Inhaltstypen bereit. application/json wird beispielsweise JSON und text/xml wird XML zugeordnet. Inhaltstypen, die nicht JSON oder XML zugeordnet sind, werden dem unformatierten binären Format zugeordnet.
In einigen Szenarios (beispielsweise Push-APIs) steuert der Dienstentwickler den vom Client zurückgegebenen Inhaltstyp nicht. Beispielsweise können Clients möglicherweise JSON als text/javascript anstelle von application/json zurückgeben. In diesem Fall muss der Dienstentwickler einen von WebContentTypeMapper abgeleiteten Typ bereitstellen, um den jeweiligen Inhaltstyp richtig zu behandeln, wie im folgenden Beispielcode dargestellt.
public class JsonContentTypeMapper : WebContentTypeMapper
{
public override WebContentFormat
GetMessageFormatForContentType(string contentType)
{
if (contentType == "text/javascript")
{
return WebContentFormat.Json;
}
else
{
return WebContentFormat.Default;
}
}
}
Der Typ muss die GetMessageFormatForContentType-Methode überschreiben. Die Methode muss das contentType-Argument auswerten und einen der folgenden Werte zurückgeben: Json, Xml, Raw oder Default. Das Zurückgeben von Default wird für die Standardzuordnungen für den Webnachrichtenencoder zurückgestellt. Im vorhergehenden Beispielcode wird der text/javascript-Inhaltstyp JSON zugeordnet, und alle anderen Zuordnungen bleiben unverändert.
Gehen Sie bezüglich der WEB.CONFIG-Datei folgendermaaßen vor, um die JsonContentTypeMapper
-Klasse zu verwenden:
<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>
Entfernen Sie das contentTypeMapper-Attribut aus der oben erwähnten Konfigurationsdatei, um die Anforderungen zum Verwenden des JsonContentTypeMapper zu überprüfen. Die Clientseite kann nicht geladen werden, wenn versucht wird, text/javascript zum Senden von JSON-Inhalt zu verwenden.
So richten Sie das Beispiel ein, erstellen es und führen es aus
Stellen Sie sicher, dass Sie Einmaliges Setupverfahren für Windows Communication Foundation-Beispiele ausgeführt haben.
Erstellen Sie die Projektmappe WebContentTypeMapperSample.sln, wie in Erstellen der Windows Communication Foundation-Beispiele beschrieben.
Navigieren Sie zu https://localhost/ServiceModelSamples/JCTMClientPage.htm (öffnen Sie JCTMClientPage.htm nicht im Browser aus dem Projektverzeichnis).
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WCF\Extensibility\Ajax\WebContentTypeMapper
|