Membuat Layanan
Membuat layanan Web sangat disederhanakan di WWSAPI oleh API Model Layanan dan alat WsUtil.exe . Model Layanan menyediakan API yang memungkinkan layanan dan klien mengirim dan menerima pesan melalui saluran sebagai panggilan metode C. Alat WsUtil menghasilkan stub dan header untuk mengimplementasikan layanan.
Menerapkan Layanan Kalkulator menggunakan WWSAPI
Dengan menggunakan sumber yang dihasilkan dari alat Wsutil.exe , terapkan layanan dengan langkah-langkah berikut.
Sertakan header di sumber aplikasi Anda.
#include "CalculatorProxyStub.h"
Menerapkan operasi layanan. Dalam contoh ini, operasi layanan adalah fungsi Tambahkan dan Kurangi dari layanan kalkulator.
HRESULT CALLBACK Add (const WS_OPERATION_CONTEXT* context,
int a, int b, int* result,
const WS_ASYNC_CONTEXT* asyncContext,
WS_ERROR* error)
{
*result = a + b;
printf ("%d + %d = %d\n", a, b, *result);
return NOERROR;
}
HRESULT CALLBACK Subtract (const WS_OPERATION_CONTEXT* context,
int a, int b, int* result,
const WS_ASYNC_CONTEXT* asyncContext,
WS_ERROR* error)
{
*result = a - b;
printf ("%d - %d = %d\n", a, b, *result);
return NOERROR;
}
Tentukan kontrak layanan dengan mengatur bidang struktur WS_SERVICE_CONTRACT .
static const DefaultBinding_ICalculatorFunctionTable calculatorFunctions = {Add, Subtract};
static const WS_SERVICE_CONTRACT calculatorContract =
{
&DefaultBinding_ICalculatorContractDesc, // comes from the generated header.
NULL, // for not specifying the default contract
&calculatorFunctions // specified by the user
};
Sekarang, buat host layanan dan buka untuk komunikasi.
WS_SERVICE_ENDPOINT serviceEndpoint = {0};
serviceEndpoint.uri.chars = L"https://+:80/example"; // address given as uri
serviceEndpoint.binding.channelBinding = WS_HTTP_CHANNEL_BINDING; // channel binding for the endpoint
serviceEndpoint.channelType = WS_CHANNEL_TYPE_REPLY; // the channel type
serviceEndpoint.uri.length = (ULONG)wcslen(serviceEndpoint.uri.chars);
serviceEndpoint.contract = (WS_SERVICE_CONTRACT*)&calculatorContract; // the contract
serviceEndpoint.properties = serviceProperties;
serviceEndpoint.propertyCount = WsCountOf(serviceProperties);
if (FAILED (hr = WsCreateServiceHost (&serviceEndpoint, 1, NULL, 0, &host, error)))
goto Error;
// WsOpenServiceHost to start the listeners in the service host
if (FAILED (hr = WsOpenServiceHost (host, NULL, error)))
goto Error;
Silakan lihat contoh kode di HttpCalculatorServiceExample untuk implementasi lengkap layanan kalkulator.