このサンプルでは、XmlSerializerFormatAttribute と DataContractFormatAttribute で Use および Style プロパティを使用する方法を示します。これらのプロパティは、メッセージの書式設定の方法を制御します。既定では、メッセージの本文は、Document に設定されたスタイルを使用して書式設定されます。こうした設定は、サービス コントラクト レベルと操作コントラクト レベルのどちらのレベルでも指定できます。
![]() |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
Style スタイル プロパティは、サービスの WSDL メタデータの書式設定を決定します。使用可能な値は Document と Rpc です。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 プロパティは、メッセージの書式を決定します。使用可能な値は Literal と Encoded で、既定値は 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" >100</n1>
<n2 xsi:type="xsd:double" >15.99</n2>
</q1:Add>
WS-I Basic Profile 1.0 では Encoded の使用が禁止されています。したがって、これを使用するのは従来のサービスで必要な場合に限ります。Encoded メッセージ形式は、XmlSerializer を使用する場合にのみ利用可能です。
送受信されたメッセージを表示できるようにするため、このサンプルは「トレースとメッセージ ログ」に基づいています。サービス構成とソース コードは、トレースとメッセージ ログを有効化して利用できるように変更されています。さらに、WsHttpBinding はセキュリティを無効にして構成されているので、ログに記録されたメッセージは暗号化されていない状態で表示できます。結果のトレース ログ (System.ServiceModel.e2e および Message.log) は、サービス トレース ビューアー ツール (SvcTraceViewer.exe)を使用して表示されます。トレースは、C:\LOGS フォルダに作成されるように構成されています。サンプルを実行する前に、このフォルダを作成します。トレース ビューア ツールでメッセージの内容を表示するには、ツールの左右両方のウィンドウで [Messages] を選択します。
次のコードでは、サービス コントラクトの Use プロパティが Encoded に設定され、メッセージ本文の形式が既定の Document から Rpc に変更されています。
[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 ファイルを調べます。また、メタデータへの影響を確認するには、https://localhost/ServiceModelSamples/service.svc?wsdl を表示します。通常、サービスのメタデータは複数のページに分割されます。メインの WSDL ページには WSDL バインディングが含まれていますが、メッセージの定義を確認するには https://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 を表示します。
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
メッセージのログ記録用に C:\LOGS ディレクトリを作成します。ユーザー Network Service にそのディレクトリの書き込み権限を与えます。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピューター構成か複数コンピューター構成かに応じて、「Running the Windows Communication Foundation Samples」の手順に従います。
![]() |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<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\Basic\Contract\Message\UseAndStyle
|