次の方法で共有


ラップされていないメッセージ

ラップ解除されたサンプルは、ラップされていないメッセージを示しています。 既定では、メッセージ本文は、サービス操作のパラメーターがラップされるように書式設定されます。 次の例は、ラップ モードでAdd サービスに対するICalculator要求メッセージを示しています。

<s:Envelope
    xmlns:s="http://www.w3.org/2003/05/soap-envelope"
    xmlns:a="http://schemas.xmlsoap.org/ws/2005/08/addressing">
    <s:Header>
        …
    </s:Header>
    <s:Body>
      <Add xmlns="http://Microsoft.ServiceModel.Samples">
        <n1>100</n1>
        <n2>15.99</n2>
      </Add>
    </s:Body>
</s:Envelope>

メッセージ本文の <Add> 要素は、 n1 パラメーターと n2 パラメーターをラップします。 これに対して、ラップされていないモードでの同様のメッセージのサンプルを次に示します。

<s:Envelope
    xmlns:s="http://www.w3.org/2003/05/soap-envelope"
    xmlns:a="http://schemas.xmlsoap.org/ws/2005/08/addressing">
    <s:Header>
        ….
    </s:Header>
    <s:Body>
      <n1 xmlns="http://Microsoft.ServiceModel.Samples">100</n1>
      <n2 xmlns="http://Microsoft.ServiceModel.Samples">15.99</n2>
    </s:Body>
  </s:Envelope>

ラップされていないメッセージは、格納要素内の n1 パラメータおよび n2 パラメータをラップしません。これらのパラメータは、SOAP 本文要素の直接の子になります。

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

このサンプルでは、次のサンプル コードに示すように、 MessageContractAttribute をサービス操作パラメーターの型と戻り値の型に適用することで、ラップされていないメッセージが作成されます。

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    ResponseMessage Add(RequestMessage request);
    [OperationContract]
    ResponseMessage Subtract(RequestMessage request);
    [OperationContract]
    ResponseMessage Multiply(RequestMessage request);
    [OperationContract]
    ResponseMessage Divide(RequestMessage request);
}

//setting IsWrapped to false means the n1 and n2
//members will be direct children of the soap body element
[MessageContract(IsWrapped = false)]
public class RequestMessage
{
    [MessageBodyMember]
    private double n1;
    [MessageBodyMember]
    private double n2;
    //…
}

//setting IsWrapped to false means the result
//member will be a direct child of the soap body element
[MessageContract(IsWrapped = false)]
public class ResponseMessage
{
    [MessageBodyMember]
    private double result;
    //…
}

送受信されているメッセージを確認できるように、このサンプルではトレースを使用します。 さらに、ログに記録するメッセージの数を減らすために、 WSHttpBinding はセキュリティなしで構成されています。

結果のトレース ログ (c:\logs\Message.log) は、 サービス トレース ビューアー ツール (SvcTraceViewer.exe) を使用して表示できます。 メッセージの内容を表示するには、サービス トレース ビューアー ツールの左側と右側の両方のウィンドウで [ メッセージ ] を選択します。 このサンプルのトレース ログは、C:\LOGS フォルダーに生成されるように構成されています。 サンプルを実行する前にこのフォルダーを作成し、このディレクトリに対するネットワーク サービスの書き込みアクセス許可をユーザーに付与します。

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

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

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

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

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