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 引数を評価し、 JsonXmlRaw、または 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 を使用するための要件を確認するには、上記の構成ファイルから contentTypeMapper 属性を削除します。 text/javascriptを使用して JSON コンテンツを送信しようとすると、クライアント ページの読み込みに失敗します。

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

  2. 「Windows Communication Foundation サンプルのビルド」の説明に従って、WebContentTypeMapperSample.slnソリューションをビルドします。

  3. http://localhost/ServiceModelSamples/JCTMClientPage.htmに移動します (プロジェクト ディレクトリ内からブラウザーで JCTMClientPage.htm を開かないでください)。