WebContentTypeMapper のサンプル

このサンプルでは、新しいコンテンツ タイプを Windows Communication Foundation (WCF) メッセージの本文の書式に割り当てる方法を示します。

WebHttpEndpoint 要素は、Web メッセージ エンコーダーをプラグインします。これによって、WCF は、JSON、XML、または生のバイナリ メッセージを同じエンドポイントで受信できるようになります。このエンコーダは、要求の HTTP コンテンツ タイプを調べて、メッセージ本文の書式を決定します。このサンプルでは、コンテンツ タイプと本文書式との間の割り当てを制御するための WebContentTypeMapper クラスを示します。

WCF には、各コンテンツ タイプの既定の割り当てが用意されています。たとえば、application/json は JSON に割り当てられ、text/xml は XML に割り当てられています。JSON または XML に割り当てられていないコンテンツ タイプは、生のバイナリ形式に割り当てられます。

場合によっては (プッシュ スタイルの API など)、クライアントによって返されるコンテンツ タイプがサービス開発者によって制御されないことがあります。たとえば、クライアントは application/json としてではなく text/javascript として JSON を返す場合があります。この場合、サービス開発者は、特定のコンテンツ タイプを正しく処理できるように、次のサンプル コードに示すような WebContentTypeMapper の派生型を指定する必要があります。

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

この派生型は、GetMessageFormatForContentType メソッドをオーバーライドする必要があります。このメソッドは、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 の使用要件を検証するには、Web.config ファイルから contentTypeMapper 属性を削除します。text/javascript を使用して JSON コンテンツを送信しようとすると、クライアント ページの読み込みに失敗します。

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

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

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

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

Bb943479.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

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