Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dienstverträge enthalten Metadaten, die definieren, wie ein Dienst Kanalnachrichten verarbeitet.
Ein WS_SERVICE_CONTRACT enthält Metadaten für einen Dienst zum Verarbeiten einer WS_MESSAGE.

Er verfügt über eine WS_CONTRACT_DESCRIPTION und eine Funktionstabelle. Eine Anwendung kann optional WS_SERVICE_MESSAGE_RECEIVE_CALLBACK angeben.
Wenn keine WS_CONTRACT_DESCRIPTION und keine Funktionstabelle angegeben sind, muss die Anwendung WS_SERVICE_MESSAGE_RECEIVE_CALLBACK angeben.

static WS_SERVICE_CONTRACT calculatorContract =
{
&calculatorContractDescription,
NULL,
&calculatorFunctions,
};
Details dazu finden Sie im Rechner-Beispiel.
Vertragsbeschreibung
WS_CONTRACT_DESCRIPTION entspricht Metadaten, die den Typvertrag des Diensts definieren. Diese werden von wsutil.exe generiert.
In Bezug auf WSDL ist 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 setzt sich aus Dienstvorgängen zusammen. Diese Vorgänge werden als Array von WS_OPERATION_DESCRIPTION angegeben.

<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 zur WSDL-Ausgabe.
Beispiel: WS_CONTRACT_DESCRIPTION
static WS_CONTRACT_DESCRIPTION contractDescriptionICalculator =
{
WsCountOf(serviceOperationsICalculator),
serviceOperationsICalculator
};
Funktionstabelle
Die Funktionstabelle ist eine Struktur von Funktionszeigern, die die einzelnen Dienstvorgänge im Dienstvertrag darstellen. Die Funktionstabellendefinition wird ebenfalls von wsutil.exe generiert.
Beispiel: Funktionstabelle
// Function Table
struct CalculatorServiceFunctionTable
{
AddOperation Add;
SubtractOperation Subtract;
};
// Populate the Function Table
static const CalculatorServiceFunctionTable calculatorFunctions = {Add, Subtract};
Verwenden von WS_SERVICE_MESSAGE_RECEIVE_CALLBACK
WS_SERVICE_MESSAGE_RECEIVE_CALLBACK weist eine zweifache sich gegenseitig ausschließende Rolle auf.
Wenn für WS_SERVICE_CONTRACT eine WS_CONTRACT_DESCRIPTION angegeben wird, wird daraus der Standardnachrichtenhandler für alle Aktionen, die nicht von der angegebenen WS_CONTRACT_DESCRIPTION unterstützt werden. Wenn andernfalls keine WS_CONTRACT_DESCRIPTION für den WS_SERVICE_CONTRACT, aber WS_SERVICE_MESSAGE_RECEIVE_CALLBACK für den WS_SERVICE_CONTRACT angegeben ist, werden alle eingehenden Nachrichten an diesen Rückruf übergeben.
Weitere Beispiele finden Sie unter
Die folgenden Rückrufe sind Teil des Vertrags:
Die folgenden Strukturen sind Teil des Vertrags: