Kontrak

Kontrak layanan membawa metadata yang menentukan cara layanan menangani pesan saluran.

WS_SERVICE_CONTRACT membawa metadata untuk layanan guna menangani WS_MESSAGE.

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

Ini memiliki WS_CONTRACT_DESCRIPTION dan tabel fungsi. Aplikasi dapat secara opsional menentukan WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.

Jika WS_CONTRACT_DESCRIPTION dan tabel fungsi tidak diberikan, aplikasi diperlukan untuk menentukan 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, 
};

Lihat contoh kalkulator untuk detailnya.

Deskripsi Kontrak

WS_CONTRACT_DESCRIPTION adalah metadata yang menentukan jenis kontrak layanan. Dihasilkan oleh wsutil.exe.

Dalam hal WSDL, WS_CONTRACT_DESCRIPTION memetakan ke wsdl:portType. Untuk setiap wsdl:portType dalam dokumen WSDL, WS_CONTRACT_DESCRIPTION terpisah akan dihasilkan.

Deskripsi kontrak terdiri dari satu atau beberapa operasi layanan. Operasi ini diberikan sebagai array 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>

Untuk detail wsdl:portType ke konversi WS_CONTRACT_DESCRIPTION, lihat bagian output WSDL.

Contoh: WS_CONTRACT_DESCRIPTION

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

Tabel Fungsi

Tabel Fungsi adalah struktur penunjuk fungsi yang mewakili setiap operasi layanan dalam kontrak layanan. Definisi tabel fungsi juga dihasilkan oleh wsutil.exe.

Contoh: Tabel Fungsi

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

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

Menggunakan WS_SERVICE_MESSAGE_RECEIVE_CALLBACK

WS_SERVICE_MESSAGE_RECEIVE_CALLBACK memiliki peran dual yang saling eksklusif.

Jika WS_CONTRACT_DESCRIPTION ditentukan pada WS_SERVICE_CONTRACT, ini menjadi handler pesan default untuk semua tindakan yang tidak didukung oleh WS_CONTRACT_DESCRIPTION yang ditentukan. Jika tidak, jika WS_CONTRACT_DESCRIPTION tidak ditentukan pada WS_SERVICE_CONTRACT, dan WS_SERVICE_MESSAGE_RECEIVE_CALLBACK ditentukan pada WS_SERVICE_CONTRACT semua pesan yang akan datang diteruskan ke panggilan balik ini.

Untuk contoh lainnya, silakan lihat

Panggilan balik berikut adalah bagian dari kontrak:

Struktur berikut adalah bagian dari kontrak: