Vertrag

Ein Dienstvertrag enthält Metadaten, die definieren, wie ein Dienst Kanalnachrichten verarbeitet.

Ein _ WS-DIENSTVERTRAG _ enthält Metadaten für einen Dienst, um eine WS _ MESSAGEzu verarbeiten.

Diagramm, das WS_SERVICE_CONTRACT Metadaten in einer Nachricht an einen Dienstendpunkt zeigt.

Sie verfügt über eine WS _ CONTRACT _ DESCRIPTION und eine Funktionstabelle. Eine Anwendung kann optional WS _ SERVICE MESSAGE _ RECEIVE _ _ CALLBACKangeben.

Wenn keine WS _ CONTRACT _ DESCRIPTION und eine Funktionstabelle angegeben werden, muss die Anwendung WS _ SERVICE MESSAGE _ RECEIVE _ _ CALLBACKangeben.

Diagramm: Hinzufügen und Subtrahieren von Dienstvorgängen im ICalculator-Dienstvertrag

static WS_SERVICE_CONTRACT calculatorContract = 
{
    &calculatorContractDescription, 
    NULL, 
    &calculatorFunctions, 
};

Weitere Informationen finden Sie im Rechnerbeispiel.

Vertragsbeschreibung

WS _ CONTRACT _ DESCRIPTION sind Metadaten, die den Typvertrag des Diensts definieren. Wird von wsutil.exegeneriert.

Im Hinblick auf WSDL wird eine WS _ CONTRACT _ DESCRIPTION einem wsdl:portType zugeordnet. Für jeden wsdl:portType im WSDL-Dokument wird eine separate WS _ CONTRACT _ DESCRIPTION generiert.

Eine Vertragsbeschreibung besteht aus oder mehreren Dienstvorgängen. Diese Vorgänge werden als Array von WS _ OPERATION _ DESCRIPTIONangegeben.

Diagramm, das eine WS_CONTRACT_DESCRIPTION als Array von WS_OPERATION_DESCRIPTIONs zeigt.

<wsdl:definitions xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:wsu="https://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://Example.org" 
xmlns:wsa="https://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="https://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:wsap="https://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:xsd="https://www.w3.org/2001/XMLSchema" 
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsaw="https://www.w3.org/2006/05/addressing/wsdl" 
xmlns:soap12="https://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="https://www.w3.org/2005/08/addressing" 
xmlns:wsx="https://schemas.xmlsoap.org/ws/2004/09/mex" targetNamespace="https://Example.org" 
xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/">
 <wsdl:portType name="ICalculator">
  <wsdl:operation name="Add">
   <wsdl:input wsaw:Action="https://Example.org/ICalculator/Add" 
   message="tns:ICalculator_Add_InputMessage" />
   <wsdl:output wsaw:Action="https://Example.org/ICalculator/AddResponse" 
   message="tns:ICalculator_Add_OutputMessage" />
  </wsdl:operation>
 </wsdl:portType>
</wsdl:definitions>

Ausführliche Informationen zur Konvertierung von wsdl:portType in WS _ CONTRACT _ DESCRIPTION finden Sie im Abschnitt WSDL-Ausgabe.

Beispiel: WS _ CONTRACT _ DESCRIPTION

static WS_CONTRACT_DESCRIPTION contractDescriptionICalculator =
{
    WsCountOf(serviceOperationsICalculator),
    serviceOperationsICalculator
};

Funktionstabelle

Funktionstabelle ist eine Struktur von Funktionszeigern, die die einzelnen Dienstvorgänge im Dienstvertrag darstellen. Die Funktionstabellendefinition wird auch von wsutil.exegeneriert.

Beispiel: Funktionstabelle

 // Function Table
struct CalculatorServiceFunctionTable
{
      AddOperation Add;
      SubtractOperation Subtract;
};

// Populate the Function Table
static const CalculatorServiceFunctionTable calculatorFunctions = {Add, Subtract};

Verwenden des WS _ SERVICE _ MESSAGE _ _ RECEIVE-RÜCKRUFS

WS _ SERVICE _ MESSAGE _ RECEIVE _ CALLBACK verfügt über eine zwei sich gegenseitig ausschließende Rolle.

Wenn eine WS _ CONTRACT _ DESCRIPTION im _ WS-DIENSTVERTRAG _angegeben ist, wird dies der Standardmeldungshandler für alle Aktionen, die von der angegebenen WS _ CONTRACT _ DESCRIPTION nicht unterstützt werden. Andernfalls werden alle eingehenden Nachrichten an diesen Rückruf übergeben, wenn WS _ CONTRACT _ DESCRIPTION im _ WS-DIENSTVERTRAG _ nicht angegeben ist und der WS _ SERVICE MESSAGE _ RECEIVE _ _ CALLBACK für den _ WS-DIENSTVERTRAG _ angegeben ist.

Weitere Beispiele finden Sie unter

Die folgenden Rückrufe sind Teil des Vertrags:

Die folgenden Strukturen sind Teil des Vertrags: