Sdílet prostřednictvím


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.

diagram znázorňující strukturu hostitele služby obsahujícího koncový bod 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:

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:

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.