Hostitel služby
Hostitel služby je prostředí runtime pro hostování služby v rámci procesu.
Služba může nakonfigurovat jeden nebo více koncových bodů v hostiteli služby.
Vytvoření hostitele služby
Před vytvořením hostitele služby musí služba definovat své koncové body. Koncový bod v hostiteli služby je určen ve struktuře WS_SERVICE_ENDPOINT a je definován následujícími informacemi:
- Adresa, což je fyzický identifikátor URI, na kterém bude služba hostovaná.
- Struktura WS_CHANNEL_TYPE, která určuje typ podkladového kanálu pro koncový bod.
- Struktura WS_CHANNEL_BINDING, která určuje vazbu kanálu.
- Struktura WS_SECURITY_DESCRIPTION, která obsahuje popis zabezpečení pro koncový bod.
- Struktura WS_SERVICE_CONTRACT, která představuje kontraktu služby pro koncový bod.
- Struktura WS_SERVICE_SECURITY_CALLBACK, která určuje funkci zpětného volání autorizace pro koncový bod.
- Struktura WS_SERVICE_ENDPOINT_PROPERTY, která obsahuje pole vlastností koncového bodu služby.
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.
Pro protokol SOAP přes UDP se podporují pouze jednosměrné kontrakty reprezentované WS_UDP_CHANNEL_BINDING ve výčtu WS_CHANNEL_BINDING.
Po definování koncového bodu je možné ho předat funkci WsCreateServiceHost, která přebírá pole ukazatelů na WS_SERVICE_ENDPOINT struktury.
HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);
Aplikace může volitelně poskytnout pole vlastností služby WsCreateServiceHost konfigurovat vlastní nastavení na hostiteli služby.
Aplikace otevře hostitele služby, aby začal přijímat požadavky klientů.
WsOpenServiceHost(serviceHost, NULL, NULL);
Po otevření hostitele služby ji aplikace může zavřít, pokud už nejsou žádné další operace, které ho vyžadují. Všimněte si, že tím nedojde k uvolnění prostředků a že je možné jej znovu otevřít s následným voláním WsResetServiceHost.
WsCloseServiceHost(serviceHost, NULL, NULL);
Po zavření hostitele služby může aplikace obnovit hostitele služby pro opakované použití.
WsResetServiceHost(serviceHost, NULL);
Po dokončení aplikace s hostitelem služby může uvolnit prostředky přidružené k hostiteli služby voláním WsFreeServiceHost funkce. Upozorňujeme, že WsCloseServiceHost musí být volána před voláním této funkce.
WsFreeServiceHost(serviceHost, NULL);
Informace o připojení vlastního stavu k hostiteli služby najdete v tématu Stav hostitele uživatele
Informace o autorizaci v hostiteli služby pro daný koncový bod najdete v tématu Service Authorization.
Informace o implementaci operací služeb a kontraktů služeb pro službu najdete v tématech o operacích služby a kontraktech služeb.
Bezpečnost
Aplikace může pomocí následujících vlastností řídit množství prostředků, které hostitel služby přidělí jménem aplikace:
- 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.
Pro každou z těchto vlastností jsou zvoleny zabezpečené výchozí hodnoty, pokud chce aplikace tyto vlastnosti upravit, musí být opatrní. Kromě výše uvedených vlastností lze kanálu, naslouchací proces a zprávy konkrétní vlastnosti také upravovat aplikace. Před úpravou některého z těchto nastavení si projděte aspekty zabezpečení těchto komponent.
Při použití rozhraní API hostitele služby WWSAPI by se navíc měly pečlivě vyhodnotit následující aspekty návrhu aplikace:
- Při používání MEX by aplikace měly být opatrní, aby nezpřístupňovaly žádná citlivá data. Pokud je povaha dat vystavených prostřednictvím MEX citlivá, můžou se aplikace rozhodnout nakonfigurovat koncový bod MEX se zabezpečenou vazbou, která vyžaduje alespoň ověření, a implementovat autorizaci v rámci koncového bodu pomocí WS_SERVICE_SECURITY_CALLBACK.
- Ve výchozím nastavení jsou bohaté informace o chybách zakázány na hostiteli služby WS_SERVICE_PROPERTY_FAULT_DISCLOSURE vlastnost. Je na uvážení aplikace odesílat bohaté informace o chybách jako součást chyby. To však může vést ke zpřístupnění informací, a proto se doporučuje toto nastavení změnit pouze pro scénáře ladění.
- Kromě ověření provedeného pro serializaci základního profilu 2.0 a XML hostitel služby neprovádí žádné ověření datového obsahu přijatého jako součást parametrů operace služby. Je zodpovědností aplikace provádět všechna ověření parametrů sama.
- Autorizace není implementována jako součást hostitele služby. Aplikace však mohou implementovat vlastní autorizační schéma pomocí WS_SECURITY_DESCRIPTION a WS_SERVICE_SECURITY_CALLBACK.
- Je zodpovědností aplikace používat zabezpečené vazby na svém koncovém bodu. Hostitel služby neposkytuje žádné zabezpečení nad rámec toho, co je nakonfigurované v koncovém bodu.
Následující prvky rozhraní API se používají s hostitelem služby.
Zpětné volání | Popis |
---|---|
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK | Vyvolá se při přijetí kanálu na naslouchacím procesu koncového bodu hostitelem služby. |
WS_SERVICE_CLOSE_CHANNEL_CALLBACK | Vyvolá se při zavření nebo přerušení kanálu v koncovém bodu. |
Výčet | Popis |
---|---|
WS_SERVICE_ENDPOINT_PROPERTY_ID | Volitelné parametry pro konfiguraci WS_SERVICE_ENDPOINT. |
WS_SERVICE_HOST_STATE | Stavy, ve které může být hostitel služby. |
WS_SERVICE_PROPERTY_ID | Volitelné parametry pro konfiguraci hostitele služby |
Funkce | Popis |
---|---|
WsAbortServiceHost | Přeruší a ukončí aktuální operace na hostiteli služby. |
WsCloseServiceHost | Zavře všechny naslouchací procesy tak, aby z klienta nebyly přijaty žádné nové kanály. |
WsCreateServiceHost | Vytvoří hostitele služby. |
WsFreeServiceHost | Uvolní paměť přidruženou k hostitelskému objektu služby. |
wsGetServiceHostProperty | Načte zadanou vlastnost hostitele služby. |
WsOpenServiceHost | Otevře hostitele služby pro komunikaci a spustí naslouchací procesy na všech koncových bodech. |
WsResetServiceHost | Resetuje hostitele služby pro opakované použití a resetuje základní kanál a naslouchací procesy pro opakované použití. |
Klika | Popis |
---|---|
WS_SERVICE_HOST | Neprůkazný typ používaný k odkazování na hostitele služby. |
Struktura | Popis |
---|---|
WS_SERVICE_ENDPOINT | Představuje jednotlivý koncový bod na hostiteli služby. |
WS_SERVICE_ENDPOINT_PROPERTY | Určuje nastavení specifické pro službu. |
WS_SERVICE_PROPERTY | Určuje nastavení specifické pro službu. |
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK | Určuje zpětné volání, které se volá při úspěšném přijetí kanálu. |
WS_SERVICE_PROPERTY_CLOSE_CALLBACK | Určuje zpětné volání, které se volá, když se kanál chystá zavřít. |