Contratto
Un contratto di servizio contiene metadati che definiscono il modo in cui un servizio gestisce i messaggi del canale.
Un WS_edizione StandardRVICE_CONTRACT contiene metadati per un servizio per gestire un WS_MESSAGE.
Ha un WS_CONTRACT_DESCRIPTION e una tabella delle funzioni. Un'applicazione può facoltativamente specificare WS_edizione StandardRVICE_MESSAGE_RECEIVE_CALLBACK.
Se non viene specificata una WS_CONTRACT_DESCRIPTION e una tabella di funzioni, l'applicazione deve specificare WS_edizione StandardRVICE_MESSAGE_RECEIVE_CALLBACK.
static WS_SERVICE_CONTRACT calculatorContract =
{
&calculatorContractDescription,
NULL,
&calculatorFunctions,
};
Per informazioni dettagliate, vedere l'esempio di calcolatrice .
Descrizione contratto
WS_CONTRACT_DESCRIPTION è metadati che definiscono il contratto di tipo del servizio. Generato da wsutil.exe.
In termini di WSDL, un WS_CONTRACT_DESCRIPTION esegue il mapping a un wsdl:portType. Per ogni wsdl:portType nel documento WSDL verrà generato un WS_CONTRACT_DESCRIPTION separato.
Una descrizione del contratto è costituita da una o più operazioni del servizio. Queste operazioni vengono fornite come matrice di 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>
Per informazioni dettagliate sulla conversione da wsdl:portType a WS_CONTRACT_DESCRIPTION , vedere la sezione output WSDL.
Esempio: WS_CONTRACT_DESCRIPTION
static WS_CONTRACT_DESCRIPTION contractDescriptionICalculator =
{
WsCountOf(serviceOperationsICalculator),
serviceOperationsICalculator
};
Tabella delle funzioni
La tabella delle funzioni è uno struct di puntatori a funzione che rappresentano ognuna delle operazioni del servizio nel contratto di servizio. La definizione della tabella della funzione viene generata anche da wsutil.exe.
Esempio: Tabella delle funzioni
// Function Table
struct CalculatorServiceFunctionTable
{
AddOperation Add;
SubtractOperation Subtract;
};
// Populate the Function Table
static const CalculatorServiceFunctionTable calculatorFunctions = {Add, Subtract};
Uso del WS_edizione StandardRVICE_MESSAGE_RECEIVE_CALLBACK
WS_edizione StandardRVICE_MESSAGE_RECEIVE_CALLBACK ha un doppio ruolo che si escludono a vicenda.
Se nella WS_edizione StandardRVICE_CONTRACT viene specificata una WS_CONTRACT_DESCRIPTION, questo diventa il gestore di messaggi predefinito per tutte le azioni non supportate dal WS_CONTRACT_DESCRIPTION specificato. In caso contrario, se WS_CONTRACT_DESCRIPTION non viene specificato nella WS_edizione StandardRVICE_CONTRACT e il WS_edizione StandardRVICE_MESSAGE_RECEIVE_CALLBACK viene specificato nella WS_edizione StandardRVICE_CONTRACT tutti i messaggi in arrivo vengono passati a questo callback.
Per altri esempi, vedere
I callback seguenti fanno parte del contratto:
Le strutture seguenti fanno parte del contratto: