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.

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.

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.

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