Contrato
Um contrato de serviço carrega metadados que definem como um serviço manipula mensagens de canal.
Um WS_SERVICE_CONTRACT carrega metadados de um serviço para lidar com um WS_MESSAGE.
Ele tem um WS_CONTRACT_DESCRIPTION e uma tabela de funções. Opcionalmente, um aplicativo pode especificar WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.
Se uma WS_CONTRACT_DESCRIPTION e uma tabela de funções não forem fornecidas, o aplicativo será necessário para especificar WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.
static WS_SERVICE_CONTRACT calculatorContract =
{
&calculatorContractDescription,
NULL,
&calculatorFunctions,
};
Consulte o exemplo da calculadora para obter detalhes.
Descrição do contrato
WS_CONTRACT_DESCRIPTION são os metadados que definem o contrato de tipo do serviço. Gerado por wsutil.exe.
Em termos de WSDL, um WS_CONTRACT_DESCRIPTION mapeia para um wsdl:portType. Para cada wsdl:portType no documento WSDL, um WS_CONTRACT_DESCRIPTIONseparado será gerado.
Uma descrição do contrato é composta por uma ou mais operações de serviço. Essas operações são fornecidas como uma matriz de WS_OPERATION_DESCRIPTION.
<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 obter detalhes de wsdl:portType para WS_CONTRACT_DESCRIPTION conversão, consulte a seção de saída do WSDL.
Exemplo: WS_CONTRACT_DESCRIPTION
static WS_CONTRACT_DESCRIPTION contractDescriptionICalculator =
{
WsCountOf(serviceOperationsICalculator),
serviceOperationsICalculator
};
Tabela de funções
Tabela de funções é um struct de ponteiros de função que representam cada uma das operações de serviço no contrato de serviço. A definição da tabela de funções também é gerada por wsutil.exe.
Exemplo: Tabela de Funções
// Function Table
struct CalculatorServiceFunctionTable
{
AddOperation Add;
SubtractOperation Subtract;
};
// Populate the Function Table
static const CalculatorServiceFunctionTable calculatorFunctions = {Add, Subtract};
Usando o WS_SERVICE_MESSAGE_RECEIVE_CALLBACK
XWS_SERVICE_MESSAGE_RECEIVE_CALLBACK tem uma função mutuamente exclusiva dupla.
Se um WS_CONTRACT_DESCRIPTION for especificado no WS_SERVICE_CONTRACT, isso se tornará o manipulador de mensagens padrão para todas as ações que não têm suporte no WS_CONTRACT_DESCRIPTION especificado. Caso contrário, se WS_CONTRACT_DESCRIPTION não for especificado no WS_SERVICE_CONTRACTe o WS_SERVICE_MESSAGE_RECEIVE_CALLBACK for especificado no WS_SERVICE_CONTRACT todas as mensagensrecebidas serão passadas para esse retorno de chamada.
Para obter mais exemplos, consulte
Os seguintes retornos de chamada fazem parte do contrato:
As seguintes estruturas fazem parte do contrato: