Leer en inglés

Compartir a través de


Contrato

Un contrato de servicio incluye metadatos que definen cómo un servicio controla los mensajes del canal.

Un WS_SERVICE_CONTRACT contiene metadatos para que un servicio controle un WS_MESSAGE.

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

Tiene una WS_CONTRACT_DESCRIPTION y una tabla de funciones. Opcionalmente, una aplicación puede especificar WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.

Si no se proporciona una WS_CONTRACT_DESCRIPTION y una tabla de funciones, la aplicación deberá especificar una 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, 
};

Consulte el ejemplo de la calculadora para obtener más información.

Descripción del contrato

WS_CONTRACT_DESCRIPTION son metadatos que definen el tipo de contrato del servicio. Generado por wsutil.exe.

En términos de WSDL, una WS_CONTRACT_DESCRIPTION se asigna a un wsdl:portType. Para cada wsdl:portType en el documento WSDL se generará una WS_CONTRACT_DESCRIPTION independiente.

Una descripción del contrato se compone de una o varias operaciones de servicio. Estas operaciones se proporcionan como una matriz 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>

Para obtener más información sobre la conversión de wsdl:portType a la WS_CONTRACT_DESCRIPTION, consulte la sección Salida de WSDL.

Ejemplo: WS_CONTRACT_DESCRIPTION

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

Tabla de funciones

La tabla de funciones es una estructura de punteros de función que representan cada una de las operaciones de servicio en el contrato de servicio. La definición de la tabla de funciones también se genera mediante wsutil.exe.

Ejemplo: tabla de funciones

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

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

Usar WS_SERVICE_MESSAGE_RECEIVE_CALLBACK

WS_SERVICE_MESSAGE_RECEIVE_CALLBACK tiene un rol doble mutuamente excluyente.

Si se especifica una WS_CONTRACT_DESCRIPTION en elWS_SERVICE_CONTRACT, se convierte en el controlador de mensajes predeterminado para todas las acciones que no son compatibles con la WS_CONTRACT_DESCRIPTION especificada. De lo contrario, si no se especifica la WS_CONTRACT_DESCRIPTION en el WS_SERVICE_CONTRACT, y la WS_SERVICE_MESSAGE_RECEIVE_CALLBACK se especifica en el WS_SERVICE_CONTRACT todos los mensajes entrantes se pasan a esta devolución de llamada.

Para obtener más ejemplos, consulte

Las siguientes devoluciones de llamada forman parte del contrato:

Las estructuras siguientes forman parte del contrato: