Host usługi
Host usługi to środowisko uruchomieniowe do hostowania usługi w ramach procesu.
Usługa może skonfigurować co najmniej jeden punkt końcowy na hoście usługi.
Tworzenie hosta usługi
Przed utworzeniem hosta usługi usługa musi zdefiniować jego punkty końcowe. Punkt końcowy w hoście usługi jest określony w strukturze WS_SERVICE_ENDPOINT i jest definiowany przez następujące informacje:
- Adres, czyli fizyczny identyfikator URI, na którym będzie hostowana usługa.
- Struktura WS_CHANNEL_TYPE określająca typ bazowego kanału dla punktu końcowego.
- Struktura WS_CHANNEL_BINDING określająca powiązanie kanału.
- Struktura WS_SECURITY_DESCRIPTION zawierająca opis zabezpieczeń punktu końcowego.
- Struktura WS_SERVICE_CONTRACT reprezentująca kontraktu usługi dla punktu końcowego.
- Struktura WS_SERVICE_SECURITY_CALLBACK określająca funkcję wywołania zwrotnego autoryzacji dla punktu końcowego.
- Struktura WS_SERVICE_ENDPOINT_PROPERTY zawierająca tablicę właściwości punktu końcowego usługi.
WS_SERVICE_ENDPOINT serviceEndpoint = {0};
const WS_SERVICE_ENDPOINT* serviceEndpoints[1];
serviceEndpoints[0] = &serviceEndpoint;
WS_STRING url = WS_STRING_VALUE(L"net.tcp://+/Example");
// Method based service contract for the service
static WS_SERVICE_CONTRACT calculatorContract =
{
&calculatorContractDescription, // comes from a generated header.
NULL,
&calculatorFunctions, // specified by the application
};
serviceEndpoint.address.url = &url;
serviceEndpoint.binding.channelBinding = WS_TCP_CHANNEL_BINDING;
serviceEndpoint.contract = &calculatorContract;
serviceEndpoint.channelType = WS_CHANNEL_TYPE_DUPLEX_SESSION;
serviceEndpoint.authorizationCallback = AuthorizationCallback; // Authorization callback.
Tylko kontrakty jednokierunkowe są obsługiwane dla protokołu SOAP przez UDP, reprezentowane przez WS_UDP_CHANNEL_BINDING w wyliczenie WS_CHANNEL_BINDING.
Po zdefiniowaniu punktu końcowego można go przekazać do funkcji WsCreateServiceHost, która pobiera tablicę wskaźników do WS_SERVICE_ENDPOINT struktur.
HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);
Aplikacja może opcjonalnie udostępnić tablicę właściwości usługi , aby WsCreateServiceHost w celu skonfigurowania ustawień niestandardowych na hoście usługi.
Aplikacja otwiera hosta usługi, aby rozpocząć akceptowanie żądań klientów.
WsOpenServiceHost(serviceHost, NULL, NULL);
Po otwarciu hosta usługi aplikacja może ją zamknąć, jeśli nie ma więcej operacji, które jej wymagają. Należy pamiętać, że nie zwalnia to zasobów i że można go ponownie otworzyć za pomocą kolejnego wywołania WsResetServiceHost.
WsCloseServiceHost(serviceHost, NULL, NULL);
Po zamknięciu hosta usługi aplikacja może zresetować hosta usługi do ponownego użycia.
WsResetServiceHost(serviceHost, NULL);
Gdy aplikacja zostanie wykonana z hostem usługi, może zwolnić zasoby skojarzone z hostem usługi, wywołując funkcję WsFreeServiceHost. Przed wywołaniem tej funkcji należy wywołać WsCloseServiceHost.
WsFreeServiceHost(serviceHost, NULL);
Aby uzyskać informacje na temat dołączania stanu niestandardowego do hosta usługi, zobacz stan hosta użytkownika
Aby uzyskać informacje na temat autoryzacji na hoście usługi dla danego punktu końcowego, zobacz Service Authorization.
Aby uzyskać informacje na temat implementowania operacji usług i kontraktów usług dla usługi, zobacz temat service operations and service contract.
Bezpieczeństwo
Aplikacja może użyć właściwości followin, aby kontrolować ilość zasobów przydzielanych przez hosta usługi w imieniu aplikacji:
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_ACCEPTING_CHANNELS,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CONCURRENCY,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNELS,
- WS_SERVICE_ENDPOINT_PROPERTY_BODY_HEAP_MAX_SIZE,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CALL_POOL_SIZE,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNEL_POOL_SIZE.
Bezpieczne wartości domyślne są wybierane dla każdej z tych właściwości. Jeśli aplikacja chce zmodyfikować te właściwości, należy zachować ostrożność. Poza wyżej wymienionymi właściwościami kanał, odbiornik i komunikat określone właściwości mogą być również modyfikowane przez aplikację. Przed zmodyfikowaniem dowolnego z tych ustawień zapoznaj się z zagadnieniami dotyczącymi zabezpieczeń tych składników.
Ponadto podczas korzystania z interfejsu API hosta usługi WWSAPI należy dokładnie ocenić następujące zagadnienia dotyczące projektowania aplikacji:
- W przypadku korzystania z MEX aplikacje powinny uważać, aby nie ujawniać żadnych poufnych danych. Jako ograniczenie ryzyka, jeśli charakter danych udostępnianych za pośrednictwem MEX jest poufny, aplikacje mogą zdecydować się na skonfigurowanie punktu końcowego MEX z bezpiecznym powiązaniem wymagającym uwierzytelniania co najmniej i zaimplementować autoryzację w ramach punktu końcowego przy użyciu WS_SERVICE_SECURITY_CALLBACK.
- Domyślnie zaawansowane informacje o błędach za pośrednictwem błędów są wyłączone na hoście usługi przez właściwość WS_SERVICE_PROPERTY_FAULT_DISCLOSURE. Według uznania aplikacji można wysyłać rozbudowane informacje o błędzie w ramach błędu. Może to jednak spowodować ujawnienie informacji, dlatego zaleca się zmianę tego ustawienia tylko w przypadku scenariuszy debugowania.
- Poza walidacją wykonywaną dla serializacji Basic Profile 2.0 i XML host usługi nie przeprowadza walidacji zawartości danych odebranej w ramach parametrów operacji usługi. Obowiązkiem aplikacji jest samodzielne przeprowadzenie wszystkich weryfikacji parametrów.
- Autoryzacja nie jest implementowana jako część hosta usługi. Jednak aplikacje mogą implementować własny schemat autoryzacji przy użyciu WS_SECURITY_DESCRIPTION i WS_SERVICE_SECURITY_CALLBACK.
- Aplikacja jest odpowiedzialna za używanie bezpiecznych powiązań w punkcie końcowym. Host usługi nie zapewnia żadnych zabezpieczeń poza tym, co zostało skonfigurowane w punkcie końcowym.
Następujące elementy interfejsu API są używane z hostem usługi.
Wywołania zwrotnego | Opis |
---|---|
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK | Wywoływane, gdy kanał jest akceptowany na odbiorniku punktu końcowego przez hosta usługi. |
WS_SERVICE_CLOSE_CHANNEL_CALLBACK | Wywoływane po zamknięciu lub przerwaniu kanału w punkcie końcowym. |
Wyliczenie | Opis |
---|---|
WS_SERVICE_ENDPOINT_PROPERTY_ID | Opcjonalne parametry konfigurowania WS_SERVICE_ENDPOINT. |
WS_SERVICE_HOST_STATE | Stany, w których może znajdować się host usługi. |
WS_SERVICE_PROPERTY_ID | Parametry opcjonalne do konfigurowania hosta usługi. |
Funkcja | Opis |
---|---|
WsAbortServiceHost | Przerywa i przerywa bieżące operacje na hoście usługi. |
WsCloseServiceHost | Zamyka wszystkie odbiorniki, aby żadne nowe kanały nie zostały zaakceptowane przez klienta. |
WsCreateServiceHost | Tworzy hosta usługi. |
WsFreeServiceHost | Zwalnia pamięć skojarzona z obiektem hosta usługi. |
WsGetServiceHostProperty | Pobiera określoną właściwość hosta usługi. |
WsOpenServiceHost | Otwiera hosta usługi na potrzeby komunikacji i uruchamia odbiorniki we wszystkich punktach końcowych. |
WsResetServiceHost | Resetuje hosta usługi do ponownego użycia i resetuje źródłowy kanał i odbiorniki do ponownego użycia. |
Uchwyt | Opis |
---|---|
WS_SERVICE_HOST | Nieprzezroczystym typem używanym do odwołowania się do hosta usługi. |
Struktura | Opis |
---|---|
WS_SERVICE_ENDPOINT | Reprezentuje pojedynczy punkt końcowy na hoście usługi. |
WS_SERVICE_ENDPOINT_PROPERTY | Określa ustawienie specyficzne dla usługi. |
WS_SERVICE_PROPERTY | Określa ustawienie specyficzne dla usługi. |
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK | Określa wywołanie zwrotne, które jest wywoływane po pomyślnym zaakceptowaniu kanału. |
WS_SERVICE_PROPERTY_CLOSE_CALLBACK | Określa wywołanie zwrotne, które jest wywoływane, gdy kanał ma zostać zamknięty. |