Unwrapped Messages
Cet exemple montre des messages non encapsulés. Par défaut, le corps du message est mis en forme de manière à ce que les paramètres d'une opération de service soient encapsulés. L'exemple suivant montre un message de demande Add
au service ICalculator
en mode encapsulé.
<s:Envelope
xmlns:s=http://www.w3.org/2003/05/soap-envelope
xmlns:a="https://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>
dans le corps du message encapsule les paramètres n1
et n2
. Par opposition, l'exemple suivant montre le message équivalent en mode non encapsulé.
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="https://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>
</MessageLogTraceRecord>
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 ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique. |
Dans cet exemple, un message non encapsulé est créé en appliquant l'MessageContractAttribute au type de paramètre de l'opération de service et au type de valeur de retour comme le montre 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 qui sont envoyés et reçus, cet exemple utilise le suivi. De plus, la WSHttpBinding a été configurée sans sécurité, pour réduire le nombre de messages qu'elle enregistre.
Le journal de suivi qui en résulte (c:\logs\Message.log) peut être affiché en utilisant l'Service Trace Viewer Tool. Pour consulter le contenu du message, sélectionnez Messages dans les volets de gauche et de droite de l'outil Service Trace Viewer. Les journaux de suivi dans 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 à l'utilisateur l'accès en écriture au service réseau pour ce répertoire.
Pour configurer, générer et exécuter l'exemple
Assurez-vous d'avoir effectué la procédure indiquée à la section Procédure d'installation unique pour les exemples Windows Communication Foundation.
Créez un répertoire C:\LOGS pour l'enregistrement des messages. Accordez à l'utilisateur l'accès en écriture au service réseau pour ce répertoire.
Pour générer l'édition C# ou Visual Basic .NET de la solution, suivez les instructions indiquées dans Génération des exemples Windows Communication Foundation.
Pour exécuter l'exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions indiquées dans Exécution des exemples Windows Communication Foundation.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.