次の方法で共有


Use プロパティと Style プロパティの設定

UseAndStyle サンプルでは、XmlSerializerFormatAttributeDataContractFormatAttributeで Use プロパティと Style プロパティを使用する方法を示します。 これらのプロパティは、メッセージの書式設定方法に影響します。 既定では、メッセージ本文はスタイルが Document に設定された形式になっています。 これらの設定は、サービス コントラクト レベルまたは操作コントラクト レベルで指定できます。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

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 表現には、次の例に示すように、操作と交換されるドキュメントを表す 1 つの要素が含まれます。

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

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

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

エンコードとは、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);
}

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

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

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

  2. メッセージをログに記録するための C:\LOGS ディレクトリを作成します。 このディレクトリに対するネットワーク サービスの書き込みアクセス許可をユーザーに付与します。

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

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