Festlegen der Use-Eigenschaft und der Style-Eigenschaft

Im UseAndStyle-Beispiel wird die Verwendung der Eigenschaften „Use“ und „Style“ in XmlSerializerFormatAttribute und DataContractFormatAttribute veranschaulicht. Diese Eigenschaften beeinflussen die Formatierung von Nachrichten. Standardmäßig wird der Nachrichtentext mit dem auf Document festgelegten Format formatiert. Diese Einstellungen können entweder auf der Dienstvertragsebene oder der Vorgangsvertragsebene angegeben werden.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Die Style-Stileigenschaft bestimmt, wie die WSDL-Metadaten für den Dienst formatiert werden. Mögliche Werte sind Document und Rpc. RPC bedeutet, dass die WSDL-Darstellung von Nachrichten, die für einen Vorgang ausgetauscht wurden, Parameter entsprechend einem Remoteprozeduraufruf enthält. Im Folgenden finden Sie ein Beispiel.

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

Das Format auf Document festzulegen, bedeutet, dass die WSDL-Darstellung ein einzelnes Element enthält, das das gegen einen Vorgang ausgetauschte Dokument darstellt. Dies ist im folgenden Beispiel veranschaulicht.

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

Die Use-Eigenschaft bestimmt das Format der Nachricht. Mögliche Werte sind Literal und Encoded. Der Standardwert ist Literal. Literal bedeutet, dass die Nachricht eine Literalinstanz des Schemas in der WSDL ist, wie im folgenden Dokument-/Literal-Beispiel dargestellt.

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

Encoded bedeutet, dass die Schemen in der WSDL abstrakte Spezifikationen sind, die gemäß den Regeln in SOAP 1.1, Abschnitt 5 codiert werden. Es folgt ein RPC/Encoded-Beispiel.

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

WS-I Basic Profile 1.0 verbietet die Verwendung von Encoded. Sie sollten dies daher nur verwenden, wenn es aufgrund von älteren Diensten erforderlich ist. Das Encoded-Nachrichtenformat ist nur bei Verwendung von XmlSerializer verfügbar.

Damit Sie die gesendeten und empfangenen Nachrichten anzeigen können, basiert dieses Beispiel auf der Ablaufverfolgungs- und Nachrichtenprotokollierung. Die Dienstkonfiguration und der Quellcode wurden geändert, um Ablaufverfolgung und Nachrichtenprotokollierung zu aktivieren und zu verwenden. Außerdem wurde WSHttpBinding ohne Sicherheit konfiguriert, sodass protokollierte Nachrichten in einem unverschlüsselten Format angezeigt werden können. Die resultierenden Ablaufverfolgungsprotokolle („System.ServiceModel.e2e“ und „Message.log“) sollten mithilfe des Service Trace Viewer-Tools (SvcTraceViewer.exe) angezeigt werden. Die Ablaufverfolgungen sind so konfiguriert, dass sie im Ordner C:\LOGS erstellt werden. Erstellen Sie den Ordner vor dem Ausführen des Beispiels. Wählen Sie zum Anzeigen der Nachrichteninhalte im Service Trace Viewer-Tool im linken und rechten Bereich Meldungen aus.

Im folgenden Code wird der Dienstvertrag veranschaulicht, wobei die Use-Eigenschaft auf OperationFormatUse festgelegt und das Format des Nachrichtentexts vom Standard (OperationFormatStyle) in Document geändert wurde.

[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);
}

Um den Unterschied zwischen den unterschiedlichen Einstellungen für Use und Style zu verdeutlichen, ändern Sie sie im Dienst, generieren Sie den Client erneut, führen Sie das Beispiel aus, und betrachten Sie dann die Datei "c:\logs\message.logs" im Service Trace Viewer-Tool. Beachten Sie außerdem die Auswirkungen auf die Metadaten, indem Sie http://localhost/ServiceModelSamples/service.svc?wsdl anzeigen. Die Metadaten für Dienste sind normalerweise in mehrere Seiten untergeteilt. Die Hauptseite „wsdl“ enthält die WSDL-Bindungen, aber zeigen Sie http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 an, um die Nachrichtendefinitionen zu beobachten.

So können Sie das Beispiel einrichten, erstellen und ausführen

  1. Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Erstellen Sie zum Protokollieren von Nachrichten das Verzeichnis C:\LOGS. Weisen Sie dem Benutzer Network Service die Schreibberechtigung für dieses Verzeichnis zu.

  3. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.

  4. Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.