Impostazione delle proprietà Use e Style
Nell’esempio UseAndStyle viene illustrato l'uso delle proprietà Use e Style in XmlSerializerFormatAttribute e DataContractFormatAttribute. Queste proprietà influiscono sulla formattazione dei messaggi. Per impostazione predefinita, la formattazione del corpo del messaggio prevede che lo stile sia impostato su Document. Queste impostazioni possono essere specificate a livello del contratto di servizio o a livello del contratto dell'operazione.
Nota
La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.
La proprietà di stile Style determina come vengono formattati i metadati WSDL per il servizio. I valori possibili sono Document e Rpc. RPC indica che la rappresentazione WSDL dei messaggi scambiati in un'operazione contiene parametri analoghi a quelli di una chiamata a procedura remota. Di seguito viene riportato un esempio.
<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
<wsdl:part name="n1" type="xsd:double"/>
<wsdl:part name="n2" type="xsd:double"/>
</wsdl:message>
Se si imposta lo stile su Document la rappresentazione WSDL contiene un solo elemento che rappresenta il documento scambiato in un'operazione, come mostrato nell'esempio seguente.
<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
<wsdl:part name="parameters" element="tns:Add"/>
</wsdl:message>
La proprietà Use determina il formato del messaggio. I valori possibili sono Literal e Encoded. Il valore predefinito è Literal. Literal significa che il messaggio è un'istanza letterale dello schema nel linguaggio WSDL, come illustrato nell'esempio documento/letterale seguente.
<Add xmlns="http://Microsoft.ServiceModel.Samples">
<n1>100</n1>
<n2>15.99</n2>
</Add>
Encoded indica che gli schemi nel linguaggio WSDL sono specifiche astratte codificate secondo le regole incluse nella sezione 5 della specifica di SOAP 1.1. Di seguito viene riportato un esempio RPC/codificato.
<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>
L'uso di Encoded è proibito in WS-I Basic Profile 1.0 e deve essere usato solo quando richiesto dai servizi legacy. Il formato di messaggio Encoded
è disponibile solo quando si usa XmlSerializer.
Per poter visualizzare i messaggi inviati e ricevuti, questo esempio si basa sulla registrazione di tracce e messaggi. La configurazione del servizio e il codice sorgente sono stati modificati per abilitare e usare la traccia e la registrazione dei messaggi. WSHttpBinding è stato inoltre configurato senza la sicurezza, pertanto i messaggi registrati possono essere visualizzati in un formato non crittografato. I log di traccia risultanti (System.ServiceModel.e2e e Message.log) devono essere visualizzati usando lo strumento Visualizzatore di tracce dei servizi (SvcTraceViewer.exe). Le tracci vengono configurate per essere create nella cartella C:\LOGS. Creare la cartella prima di eseguire l'esempio. Per visualizzare il contenuto del messaggio nello strumento visualizzatore delle tracce, selezionare Messaggi nei riquadri di sinistra e di destra dello strumento.
Nel codice seguente viene descritto il contratto di servizio con la proprietà Use impostata su OperationFormatUse e il formato del corpo del messaggio modificato dal valore predefinito OperationFormatStyle a 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);
}
Per visualizzare la differenza tra le impostazioni Use e Style, modificarle nel servizio, rigenerare il client, eseguire l'esempio ed esaminare il file c:\logs\message.logs con lo strumento Visualizzatore di tracce dei servizi. Osservare anche l'impatto sui metadati visualizzando http://localhost/ServiceModelSamples/service.svc?wsdl
. I metadati per i servizi in genere vengono suddivisi su più pagine. La pagina wsdl principale contiene le associazioni WSDL, ma visualizza http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0
per osservare le definizioni dei messaggi.
Per impostare, compilare ed eseguire l'esempio
Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Creare una directory C:\LOGS per la registrazione dei messaggi. Assegnare all'account Servizio di rete le autorizzazioni di scrittura per questa directory.
Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.
Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.