Use および Style プロパティの設定

UseAndStyle サンプルでは、XmlSerializerFormatAttributeDataContractFormatAttribute で Use および Style プロパティを使用する方法を示します。 これらのプロパティは、メッセージの書式設定の方法を制御します。 既定では、メッセージの本文は、Document に設定されたスタイルを使用して書式設定されます。 こうした設定は、サービス コントラクト レベルと操作コントラクト レベルのどちらのレベルでも指定できます。

Note

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

Style スタイル プロパティは、サービスの WSDL メタデータの書式設定を決定します。 使用可能な値は DocumentRpc です。 RPC は、操作で交換されるメッセージの WSDL 表現がリモート プロシージャ コールである場合と同様のパラメータを含むことを意味します。 以下に例を示します。

<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
  <wsdl:part name="n1" type="xsd:double"/>
  <wsdl:part name="n2" type="xsd:double"/>
</wsdl:message>

スタイルに対する Document への設定は、WSDL 表現には操作で交換されるドキュメントを表す単一の要素が含まれることを意味します。この例を次に示します。

<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
  <wsdl:part name="parameters" element="tns:Add"/>
</wsdl:message>

Use プロパティは、メッセージの書式を決定します。 使用可能な値は LiteralEncoded で、既定値は Literal です。 Literal は、メッセージが WSDL 内のスキーマのリテラル インスタンスであることを意味します。Document/Literal の例を次に示します。

<Add xmlns="http://Microsoft.ServiceModel.Samples">
  <n1>100</n1>
  <n2>15.99</n2>
</Add>

Encoded は、WSDL 内のスキーマが、SOAP 1.1 のセクション 5 に規定されているルールに従ってエンコードされる抽象仕様であることを意味します。 RPC/Encoded の例を次に示します。

<q1:Add xmlns:q1="http://Microsoft.ServiceModel.Samples">
  <n1 xsi:type="xsd:double" xmlns="">100</n1>
  <n2 xsi:type="xsd:double" xmlns="">15.99</n2>
</q1:Add>

WS-I Basic Profile 1.0 では Encoded の使用が禁止されています。したがって、これを使用するのは従来のサービスで必要な場合に限ります。 Encoded メッセージ形式は、XmlSerializer を使用する場合にのみ利用可能です。

送受信されるメッセージを確認できるようにするため、このサンプルは「トレースとメッセージ ログ」に基づいています。 サービス構成とソース コードは、トレースとメッセージ ログを有効化して利用できるように変更されています。 さらに、WSHttpBinding はセキュリティを無効にして構成されているので、ログに記録されたメッセージは暗号化されていない状態で表示できます。 生成されたトレース ログ (System.ServiceModel.e2e と Message.log) は、サービス トレース ビューアー ツール (SvcTraceViewer.exe) を使用して表示する必要があります。 トレースは、C:\LOGS フォルダーに作成されるように構成されています。 サンプルを実行する前に、このフォルダーを作成します。 トレース ビューアー ツールでメッセージの内容を表示するには、ツールの左右両方のウィンドウで [メッセージ] を選択します。

次のコードでは、サービス コントラクトの Use プロパティが OperationFormatUse に設定され、メッセージ本文の形式が既定の OperationFormatStyle から Document に変更されています。

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"),
XmlSerializerFormat(Style = OperationFormatStyle.Rpc,
                                 Use = OperationFormatUse.Encoded)]
public interface IUseAndStyleCalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

それぞれの Use 設定と Style 設定との違いを示すには、これらの設定をサービス内で変更してクライアントを再生成し、サンプルを実行します。その後、サービス ビューア ツールを使用して c:\logs\message.logs ファイルを調べます。 また、メタデータへの影響を確認するには、http://localhost/ServiceModelSamples/service.svc?wsdl を表示します。 通常、サービスのメタデータは複数のページに分割されます。 メイン wsdl ページには WSDL バインドが含まれていますが、メッセージ定義を確認するには、http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 を表示します。

サンプルをセットアップ、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順を実行したことを確認します。

  2. メッセージのログ記録用に C:\LOGS ディレクトリを作成します。 ユーザー Network Service にそのディレクトリの書き込み権限を与えます。

  3. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「 Building the Windows Communication Foundation Samples」の手順に従います。

  4. 単一または複数コンピューター構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。