Partager via


Messages décompressés

L’exemple décompressé illustre les messages décompressés. Par défaut, le corps du message est mis en forme afin que les paramètres d’une opération de service soient encapsulés. L’exemple suivant montre un Add message de demande au ICalculator service en mode encapsulé.

<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>

L’élément <Add> du corps du message encapsule les paramètres n1 et n2. En revanche, l’exemple suivant montre le message équivalent en mode décompressé.

<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>

Le message non encapsulé n'encapsule pas les paramètres n1 et n2 dans un élément contenant, ils sont des enfants directs de l'élément de corps SOAP.

Remarque

La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.

Dans cet exemple, un message non enveloppé est créé en appliquant le MessageContractAttribute au type de paramètre de l’opération de service et au type de valeur de retour, comme indiqué dans l’exemple de code suivant.

[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;
    //…
}

Pour vous permettre de voir les messages envoyés et reçus, cet exemple utilise le suivi. En outre, le fichier WSHttpBinding a été configuré sans sécurité pour réduire le nombre de messages qu’il enregistre.

Le journal de suivi résultant (c :\logs\Message.log) peut être consulté à l’aide de l’outil Visionneuse de trace de service (SvcTraceViewer.exe). Pour afficher le contenu du message, sélectionnez Messages dans les volets gauche et droit de l’outil Visionneuse de trace de service. Les journaux de trace de cet exemple sont configurés pour être générés dans le dossier C :\LOGS. Créez ce dossier avant d’exécuter l’exemple et accordez aux autorisations d’écriture du service réseau utilisateur pour ce répertoire.

Pour configurer, générer et exécuter l’exemple

  1. Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.

  2. Créez un répertoire C :\LOGS pour la journalisation des messages. Accordez à l'utilisateur des autorisations d'écriture du service réseau pour ce répertoire.

  3. Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.

  4. Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans la rubrique Exécution des exemples Windows Communication Foundation.