Setting the Use and Style Properties

L’échantillon UseAndStyle montre comment utiliser les propriétés Use et Style sur les attributs XmlSerializerFormatAttribute et DataContractFormatAttribute. Ces propriétés affectent la manière dont les messages sont mis en forme. Par défaut, la propriété de style, en fonction de laquelle le corps des messages est mis en forme, a pour valeur Document. Ces paramètres peuvent être spécifiés dans les contrats de service ou d'opération.

Notes

La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique.

La propriété de style Style détermine la manière dont les métadonnées WSDL du service sont mises en forme. Cette propriété peut avoir les valeurs suivantes : Document et Rpc. RPC signifie que la représentation WSDL des messages échangés pour une opération contient des paramètres propres à un appel de procédure distante. Voici un exemple.

<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
  <wsdl:part name="n1" type="xsd:double"/>
  <wsdl:part name="n2" type="xsd:double"/>
</wsdl:message>

Avec le style Document, la représentation WSDL contient un élément unique qui représente le document échangé pour une opération, tel qu'illustré dans l'exemple suivant.

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

La propriété Use détermine la mise en forme des messages. Les valeurs possibles de cette propriété sont Literal et Encoded. Sa valeur par défaut est Literal. Cette dernière valeur signifie que le message correspond à une instance littérale du schéma dans le WSDL, tel qu'illustré dans l'exemple document/littéral suivant.

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

Encoded signifie que les schémas en WSDL sont des spécifications abstraites encodées selon les règles trouvées dans SOAP 1.1, section 5. Voici un exemple de document 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>

Le profil WS-I Basic Profile 1.0 ne permet pas d'utiliser Encoded. Vous devez uniquement utiliser ce profil lorsque requis par les services hérités. Le format de message Encoded est disponible uniquement lorsque le sérialiseur XmlSerializer est utilisé.

Pour vous permettre de voir les messages envoyés et reçus, cet exemple est basé sur Suivi et journalisation des messages. La configuration du service et le code source ont été modifiés pour activer le suivi et l'enregistrement des messages et permettre leur utilisation. En outre, la liaison WSHttpBinding a été configurée sans mode de sécurité. Les messages enregistrés peuvent donc être affichés dans un format non chiffré. Les journaux de suivis obtenus (System.ServiceModel.e2e et Message.log) doivent être affichés à l’aide de l’Outil Service Trace Viewer (SvcTraceViewer.exe). Les suivis sont configurés de sorte à être créés dans le dossier C:\LOGS. Créez ce dossier avant d’exécuter l’exemple. Pour consulter le contenu des messages à l’aide de l’outil Service Trace Viewer, sélectionnez Messages dans les volets gauche et droit de cet outil.

Dans le contrat de service défini par le code suivant, la propriété Use a la valeur OperationFormatUse et le format du corps du message au lieu d'avoir la valeur par défaut OperationFormatStyle a la valeur 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);
}

Pour se rendre compte des différences existant entre les paramètres Use et Style, modifiez-les au niveau du service, régénérez le client, exécutez l'exemple, puis examinez le fichier c:\logs\message.logs à l'aide de l'outil Service Trace Viewer. Observez également l’impact sur les métadonnées en affichant http://localhost/ServiceModelSamples/service.svc?wsdl. En principe, les métadonnées des services sont réparties sur plusieurs pages. La page wsdl principale contient les liaisons WSDL, mais affichez http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 pour observer les définitions de message.

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 l'enregistrement des messages. Accordez à l'utilisateur des droits d'accès en écriture au 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’échantillon dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions fournies dans Exécution des échantillons Windows Communication Foundation.