Partager via


Contrat

Un contrat de service contient des métadonnées qui définissent la façon dont un service gère les messages du canal.

Une WS_SERVICE_CONTRACT s’occupe des métadonnées d’un service pour gérer un WS_MESSAGE.

Diagram showing WS_SERVICE_CONTRACT metadata in a message to a service endpoint.

Il dispose d’un WS_CONTRACT_DESCRIPTION et d’une table de fonctions. Une application peut éventuellement spécifier WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.

Si un WS_CONTRACT_DESCRIPTION et une table de fonctions ne sont pas fournis, l’application est nécessaire pour spécifier WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.

Diagram showing the Add and Subtract service operations in the ICalculator service contract.

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

Pour plus d’informations, consultez l’exemple de calculatrice.

Description du contrat

WS_CONTRACT_DESCRIPTION est une métadonnée définissant le contrat du type de service. Généré par wsutil.exe.

Concernant le WSDL, une WS_CONTRACT_DESCRIPTION mappe à un wsdl:portType. Pour chaque wsdl:portType dans le document WSDL, un WS_CONTRACT_DESCRIPTION distinct est généré.

Une description de contrat est constituée d’au moins une opération de service. Ces opérations sont fournies sous la forme d’un tableau de WS_OPERATION_DESCRIPTION.

Diagram showing a WS_CONTRACT_DESCRIPTION as an array of WS_OPERATION_DESCRIPTIONs.

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

Pour plus d’informations sur wsdl:portType vers la conversion WS_CONTRACT_DESCRIPTION, consultez la section sortie WSDL.

Exemple : WS_CONTRACT_DESCRIPTION

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

Table de fonctions

La table de fonctions est un struct des pointeurs de fonction représentant chacune des opérations de service dans le contrat de service. La définition de la table de fonctions est également générée par wsutil.exe.

Exemple : Table de fonctions

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

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

Utilisation du WS_SERVICE_MESSAGE_RECEIVE_CALLBACK

WS_SERVICE_MESSAGE_RECEIVE_CALLBACK joue un rôle double mutuellement exclusif.

Si un WS_CONTRACT_DESCRIPTION est spécifié sur WS_SERVICE_CONTRACT, il devient le gestionnaire de messages par défaut pour toutes les actions non prises en charge par le WS_CONTRACT_DESCRIPTION spécifié. Si WS_CONTRACT_DESCRIPTION n’est par contre pas spécifié sur le WS_SERVICE_CONTRACT et le WS_SERVICE_MESSAGE_RECEIVE_CALLBACK est spécifié sur le WS_SERVICE_CONTRACT, tous les messages à venir sont passés à ce rappel.

Pour plus d’exemples, consultez

Les rappels suivants font partie du contrat :

Les structures suivantes font partie du contrat :