Servicehost
De servicehost is de runtime-omgeving voor het hosten van een service binnen een proces.
Een service kan een of meer eindpunten in een servicehost configureren.
Een servicehost maken
Voordat u een servicehost maakt, moet een service de eindpunten definiëren. Een eindpunt in de servicehost wordt opgegeven in de WS_SERVICE_ENDPOINT structuur en wordt gedefinieerd door de volgende informatie:
- Een adres, de fysieke URI waarop de service wordt gehost.
- Een WS_CHANNEL_TYPE structuur die het type van het onderliggende kanaal voor het eindpunt aangeeft.
- Een WS_CHANNEL_BINDING structuur die de binding van het kanaal aangeeft.
- Een WS_SECURITY_DESCRIPTION structuur die de beveiligingsbeschrijving voor het eindpunt bevat.
- Een WS_SERVICE_CONTRACT structuur die het servicecontract vertegenwoordigt voor het eindpunt.
- Een WS_SERVICE_SECURITY_CALLBACK structuur die een callback-functie voor autorisatie voor het eindpunt aangeeft.
- Een WS_SERVICE_ENDPOINT_PROPERTY structuur die een matrix met eigenschappen van service-eindpunten bevat.
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.
Er worden slechts éénrichtingscontracten ondersteund voor SOAP via UDP, vertegenwoordigd door WS_UDP_CHANNEL_BINDING in de opsomming WS_CHANNEL_BINDING.
Nadat een eindpunt is gedefinieerd, kan het worden doorgegeven aan de functie WsCreateServiceHost, waarmee een matrix met aanwijzers naar WS_SERVICE_ENDPOINT structuren wordt verzonden.
HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);
Een toepassing kan desgewenst een matrix van service-eigenschappen bieden om WsCreateServiceHostteom aangepaste instellingen op de servicehost te configureren.
Een toepassing opent de servicehost om clientaanvragen te accepteren.
WsOpenServiceHost(serviceHost, NULL, NULL);
Nadat de servicehost is geopend, kan de toepassing deze sluiten als er geen bewerkingen meer nodig zijn. Houd er rekening mee dat hiermee geen resources worden vrijgegeven en dat deze opnieuw kan worden geopend met een volgende aanroep naar WsResetServiceHost.
WsCloseServiceHost(serviceHost, NULL, NULL);
Na het sluiten van de servicehost kan een toepassing de servicehost opnieuw instellen voor hergebruik.
WsResetServiceHost(serviceHost, NULL);
Wanneer de toepassing wordt uitgevoerd met de servicehost, kunnen de resources die aan de servicehost zijn gekoppeld, vrijmaken door de WsFreeServiceHost--functie aan te roepen. Houd er rekening mee dat WsCloseServiceHost- moet worden aangeroepen voordat u deze functie aanroept.
WsFreeServiceHost(serviceHost, NULL);
Zie voor meer informatie over het koppelen van een aangepaste status aan de servicehost gebruikershoststatus
Zie Service Authorizationvoor meer informatie over autorisatie in een servicehost voor een bepaald eindpunt.
Zie de onderwerpen servicebewerkingen en servicecontractvoor iinformation over het implementeren van servicebewerkingen en servicecontracten voor een service.
Veiligheid
Een toepassing kan de volgeigenschappen gebruiken om de hoeveelheid resources te bepalen die de servicehost toewijst namens de toepassing:
- 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.
Veilige standaardinstellingen worden gekozen voor elk van deze eigenschappen. Een toepassing moet voorzichtig zijn als deze eigenschappen moeten worden gewijzigd. Naast de bovenstaande eigenschappen kunnen kanaal, listener en bericht ook worden gewijzigd door de toepassing. Raadpleeg de beveiligingsoverwegingen van deze onderdelen voordat u een van deze instellingen wijzigt.
Daarnaast moeten de volgende overwegingen bij het ontwerpen van toepassingen zorgvuldig worden geëvalueerd bij het gebruik van de API voor de WWSAPI-servicehost:
- Wanneer u MEX gebruikt, moeten toepassingen voorzichtig zijn met het vrijgeven van gevoelige gegevens. Als beperking, als de aard van de gegevens die via MEX worden weergegeven, gevoelig is, kunnen toepassingen ervoor kiezen om het MEX-eindpunt te configureren met een veilige binding die verificatie ten minste vereist en autorisatie implementeert als onderdeel van het eindpunt met behulp van de WS_SERVICE_SECURITY_CALLBACK.
- Uitgebreide foutinformatie via fouten is standaard uitgeschakeld op servicehost door WS_SERVICE_PROPERTY_FAULT_DISCLOSURE eigenschap. Het is aan de discretie van de toepassing om uitgebreide foutinformatie te verzenden als onderdeel van de fout. Dit kan echter leiden tot openbaarmaking van informatie en daarom wordt aanbevolen dat deze instelling alleen wordt gewijzigd voor foutopsporingsscenario's.
- Naast validatie die is uitgevoerd voor Basic Profile 2.0 en XML-serialisatie, voert de servicehost geen validatie uit voor de gegevensinhoud die is ontvangen als onderdeel van servicebewerkingsparameters. Het is de verantwoordelijkheid van de toepassing om alle parametervalidaties zelf uit te voeren.
- Autorisatie wordt niet geïmplementeerd als onderdeel van de servicehost. Toepassingen kunnen echter hun eigen autorisatieschema implementeren met behulp van WS_SECURITY_DESCRIPTION en de WS_SERVICE_SECURITY_CALLBACK.
- Het is de verantwoordelijkheid van de toepassing om veilige bindingen op het eindpunt te gebruiken. De servicehost biedt geen beveiliging die verder gaat dan wat op het eindpunt is geconfigureerd.
De volgende API-elementen worden gebruikt met de servicehost.
Callback | Beschrijving |
---|---|
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK | Aangeroepen wanneer een kanaal wordt geaccepteerd op een eindpuntlistener door de servicehost. |
WS_SERVICE_CLOSE_CHANNEL_CALLBACK | Aangeroepen wanneer een kanaal wordt gesloten of afgebroken op een eindpunt. |
Opsomming | Beschrijving |
---|---|
WS_SERVICE_ENDPOINT_PROPERTY_ID | Optionele parameters voor het configureren van een WS_SERVICE_ENDPOINT. |
WS_SERVICE_HOST_STATE | De status van een servicehost kan zich in. |
WS_SERVICE_PROPERTY_ID | Optionele parameters voor het configureren van de servicehost. |
Functie | Beschrijving |
---|---|
WsAbortServiceHost- | Onderbreekt en stopt de huidige bewerkingen op de servicehost. |
WsCloseServiceHost- | Hiermee sluit u alle listeners zodat er geen nieuwe kanalen van de client worden geaccepteerd. |
WsCreateServiceHost- | Hiermee maakt u een servicehost. |
WsFreeServiceHost- | Hiermee wordt het geheugen vrijgegeven dat is gekoppeld aan een servicehostobject. |
WsGetServiceHostProperty- | Hiermee haalt u een opgegeven servicehosteigenschap op. |
WsOpenServiceHost- | Hiermee opent u een servicehost voor communicatie en start u de listeners op alle eindpunten. |
WsResetServiceHost- | Hiermee stelt u de servicehost opnieuw in voor hergebruik en stelt u het onderliggende kanaal en de listeners opnieuw in voor hergebruik. |
Handvat | Beschrijving |
---|---|
WS_SERVICE_HOST | Een ondoorzichtig type dat wordt gebruikt om te verwijzen naar een servicehost. |
Structuur | Beschrijving |
---|---|
WS_SERVICE_ENDPOINT | Vertegenwoordigt een afzonderlijk eindpunt op een servicehost. |
WS_SERVICE_ENDPOINT_PROPERTY | Hiermee geeft u een servicespecifieke instelling op. |
WS_SERVICE_PROPERTY | Hiermee geeft u een servicespecifieke instelling op. |
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK | Hiermee geeft u de callback op die wordt aangeroepen wanneer een kanaal is geaccepteerd. |
WS_SERVICE_PROPERTY_CLOSE_CALLBACK | Hiermee geeft u de callback op die wordt aangeroepen wanneer een kanaal op het punt staat te worden gesloten. |