Megosztás a következőn keresztül:


Szolgáltatás létrehozása

A szolgáltatásmodell API és a WsUtil.exe eszköz jelentősen leegyszerűsíti a webszolgáltatás létrehozását a WWSAPI-ban. A szolgáltatásmodell egy API-t biztosít, amely lehetővé teszi, hogy a szolgáltatás és az ügyfél üzeneteket küldjön és fogadjon egy csatornán keresztül, C-metódushívások során. A WsUtil eszköz fejléceket és stubokat hoz létre a szolgáltatás megvalósításához.

Számológép-szolgáltatás implementálása a WWSAPI használatával

A Wsutil.exe eszközből létrehozott források használatával hajtsa végre a szolgáltatást az alábbi lépésekkel.

Adja meg a fejléceket az alkalmazás forrásában.

#include "CalculatorProxyStub.h"

Implementálja a szolgáltatásműveleteket. Ebben a példában a szolgáltatásműveletek a számológép szolgáltatás Hozzáadás és kivonás függvényei.

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;
}

Definiálja a szolgáltatási szerződést egy WS_SERVICE_CONTRACT-struktúra mezőinek beállításával.

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
};

Most hozzon létre egy szolgáltatás-gazdagépet, és nyissa meg a kommunikációhoz.

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;

A számológép szolgáltatás teljes körű megvalósításáért tekintse meg a HttpCalculatorServiceExample kód példáját.