Contract
服務合約會攜帶元數據,定義服務如何處理通道訊息。
WS_SERVICE_CONTRACT會攜帶服務的元數據來處理WS_MESSAGE。
它有WS_CONTRACT_DESCRIPTION和函式數據表。 應用程式可以選擇性地指定 WS_SERVICE_MESSAGE_RECEIVE_CALLBACK。
如果未指定WS_CONTRACT_DESCRIPTION和函式數據表,則應用程式必須指定WS_SERVICE_MESSAGE_RECEIVE_CALLBACK。
static WS_SERVICE_CONTRACT calculatorContract =
{
&calculatorContractDescription,
NULL,
&calculatorFunctions,
};
如需詳細資訊, 請參閱計算機 範例。
合約描述
WS_CONTRACT_DESCRIPTION是定義服務類型合約的元數據。 由 wsutil.exe 產生。
就 WSDL 而言, WS_CONTRACT_DESCRIPTION 會對應至 wsdl:portType。 針對 WSDL 檔中的每個 wsdl:portType,將會產生個別 的WS_CONTRACT_DESCRIPTION 。
合約描述是由一或多個 服務作業所組成。 這些作業會以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>
如需 wsdl:portType WS_CONTRACT_DESCRIPTION轉換的詳細數據,請參閱 WSDL 輸出一節。
static WS_CONTRACT_DESCRIPTION contractDescriptionICalculator =
{
WsCountOf(serviceOperationsICalculator),
serviceOperationsICalculator
};
函式數據表
函式數據表是函式指標的結構,代表 服務合約中的每個服務作業 。 函式數據表定義也由 wsutil.exe 產生。
範例:函式數據表
// Function Table
struct CalculatorServiceFunctionTable
{
AddOperation Add;
SubtractOperation Subtract;
};
// Populate the Function Table
static const CalculatorServiceFunctionTable calculatorFunctions = {Add, Subtract};
使用 WS_SERVICE_MESSAGE_RECEIVE_CALLBACK
WS_SERVICE_MESSAGE_RECEIVE_CALLBACK具有雙重互斥角色。
如果在WS_SERVICE_CONTRACT上指定WS_CONTRACT_DESCRIPTION,這會成為指定WS_CONTRACT_DESCRIPTION不支援的所有動作的預設訊息處理程式。 否則,如果未在WS_SERVICE_CONTRACT上指定WS_CONTRACT_DESCRIPTION,且WS_SERVICE_MESSAGE_RECEIVE_CALLBACK會在WS_SERVICE_CONTRACT上指定所有傳入的訊息都會傳遞至此回呼。
如需更多範例,請參閱
下列回呼是合約的一部分:
下列結構是合約的一部分: