İngilizce dilinde oku

Aracılığıyla paylaş


Hizmet Oluşturma

WWSAPI'de Web hizmeti oluşturmak, Hizmet Modeli API'si ve WsUtil.exe aracı tarafından büyük ölçüde basitleştirilmiştir. Hizmet Modeli, hizmet ve istemcinin C yöntemi çağrıları olarak bir kanalı üzerinden iletileri gönderip almasını sağlayan bir API sağlar. WsUtil aracı, hizmeti uygulamak için saplamalar ve üst bilgiler oluşturur.

WWSAPI kullanarak Hesap Makinesi Hizmeti Uygulama

Wsutil.exe aracından oluşturulan kaynakları kullanarak aşağıdaki adımları izleyerek hizmeti uygulayın.

Üst bilgileri uygulama kaynağınıza ekleyin.

#include "CalculatorProxyStub.h"

Hizmet işlemlerini uygulayın. Bu örnekte, hizmet işlemleri hesap makinesi hizmetinin Ekle ve Çıkar işlevleridir.

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

WS_SERVICE_CONTRACT yapısının alanlarını ayarlayarak hizmet sözleşmesini tanımlayın.

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

Şimdi bir hizmet konağı oluşturun ve iletişim için açın.

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;

Hesap makinesi hizmetinin tam uygulaması için lütfen httpcalculatorserviceexample kod örneğine bakın.