WebContentTypeMapper のサンプル
WebContentTypeMapper サンプルでは、新しいコンテンツ タイプを Windows Communication Foundation (WCF) のメッセージ本文形式にマップする方法を示します。
WebHttpEndpoint 要素が Web メッセージ エンコーダーにプラグインすると、WCF では、JSON、XML、または生のバイナリ メッセージを同じエンドポイントで受信できるようになります。 このエンコーダは、要求の HTTP コンテンツ タイプを調べて、メッセージ本文の書式を決定します。 このサンプルでは、コンテンツ タイプと本文書式との間の割り当てを制御するための WebContentTypeMapper クラスを示します。
WCF には、各コンテンツ タイプの既定の割り当てが用意されています。 たとえば、application/json
は JSON に割り当てられ、text/xml
は XML に割り当てられています。 JSON または XML に割り当てられていないコンテンツ タイプは、生のバイナリ形式に割り当てられます。
場合によっては (プッシュ スタイルの API など)、クライアントによって返されるコンテンツ タイプがサービス開発者によって制御されないことがあります。 たとえば、クライアントは text/javascript
としてではなく application/json
として JSON を返す場合があります。 この場合、サービス開発者は、特定のコンテンツ タイプを正しく処理できるように、次のサンプル コードに示すような WebContentTypeMapper の派生型を指定する必要があります。
public class JsonContentTypeMapper : WebContentTypeMapper
{
public override WebContentFormat
GetMessageFormatForContentType(string contentType)
{
if (contentType == "text/javascript")
{
return WebContentFormat.Json;
}
else
{
return WebContentFormat.Default;
}
}
}
この派生型は、GetMessageFormatForContentType(String) メソッドをオーバーライドする必要があります。 このメソッドは、contentType
引数を評価して、Json、Xml、Raw、または Default のいずれかの値を返す必要があります。 Default の戻り値は、Web メッセージ エンコーダの既定の割り当てによって決まります。 前のサンプル コードでは、text/javascript
コンテンツ タイプが JSON に割り当てられ、その他すべての割り当ては変わりません。
JsonContentTypeMapper
クラスを使用するには、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>
JsonContentTypeMapper の使用要件を検証するには、Web.config ファイルから contentTypeMapper 属性を削除します。 text/javascript
を使用して JSON コンテンツを送信しようとすると、クライアント ページの読み込みに失敗します。
サンプルをセットアップ、ビルド、および実行するには
Windows Communication Foundation サンプルの 1 回限りのセットアップの手順を実行したことを確認します。
「Windows Communication Foundation サンプルのビルド」の説明に従って、ソリューション WebContentTypeMapperSample.sln をビルドします。
http://localhost/ServiceModelSamples/JCTMClientPage.htm
に移動します (プロジェクト ディレクトリからブラウザーで JCTMClientPage.htm を開かないでください)。