Kontrak
Kontrak layanan membawa metadata yang menentukan cara layanan menangani pesan saluran.
WS_SERVICE_CONTRACT membawa metadata untuk layanan guna menangani WS_MESSAGE.
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.
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.
<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: