Delen via


Serviceproxy

Een serviceproxy is de proxy aan de clientzijde voor een service. Met de serviceproxy kunnen toepassingen berichten verzenden en ontvangen via een kanaal als methode-aanroepen.

Serviceproxy's worden zo nodig gemaakt, geopend, gebruikt om een service aan te roepen en gesloten wanneer deze niet meer nodig zijn. Een toepassing kan ook een serviceproxy opnieuw gebruiken om herhaaldelijk verbinding te maken met dezelfde service zonder de tijd en resources die nodig zijn voor het initialiseren van een serviceproxy meer dan één keer. In het volgende diagram ziet u de stroom van de mogelijke statussen van de serviceproxy en de functieaanroepen of gebeurtenissen die van de ene status naar de andere leiden.

diagram met de serviceproxystatussen en de functieaanroepen of gebeurtenissen die van de ene status naar de andere leiden.

Deze serviceproxystatussen worden opgesomd in de opsomming WS_SERVICE_PROXY_STATE.

Zoals in het voorgaande diagram en de volgende code wordt geïllustreerd, wordt een serviceproxy gemaakt door een aanroep naar de WsCreateServiceProxy-functie. Als parameters voor deze aanroep biedt WWSAPI de volgende opsommingen:

Het accepteert ook optionele parameters met behulp van de volgende gegevenstypen:

Wanneer de serviceproxy is gemaakt, retourneert de functie WsCreateServiceProxy een verwijzing naar de serviceproxy, WS_SERVICE_PROXY, via een outparameter.

WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
    WS_TCP_CHANNEL_BINDING, 
    WS_CHANNEL_TYPE_DUPLEX_SESSION, 
    NULL, 
    NULL, 
    0, 
    NULL,
    0,
    &serviceProxy, 
    error);

Wanneer de serviceproxy is gemaakt, kan de toepassing de serviceproxy openen voor communicatie met een service door de functie WsOpenServiceProxy aan te roepen, waarbij een adres wordt doorgegeven structuur met het netwerkadres van het service-eindpunt waarmee verbinding moet worden gemaakt.

WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);

Wanneer de serviceproxy is geopend, kan de toepassing deze gebruiken om de service aan te roepen.

hr = Add(
    serviceProxy, 
    1, 
    2, 
    &result, 
    NULL, 
    0, 
    NULL, 
    error);

Wanneer de toepassing de serviceproxy niet meer nodig heeft, wordt de serviceproxy gesloten door de WsCloseServiceProxy- functie aan te roepen. Ook wordt het bijbehorende geheugen vrijgemaakt door WsFreeServiceProxyaan te roepen.

hr = WsCloseServiceProxy(
    serviceProxy, 
    NULL, 
    error);
hr = WsFreeServiceProxy(
    serviceProxy, 
    error);

De serviceproxy opnieuw gebruiken

U kunt ook na het aanroepen van WsCloseServiceProxy een toepassing de serviceproxy opnieuw gebruiken door de functie WsResetServiceProxy- aan te roepen.

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

Zie de volgende onderwerpen voor meer informatie over hoe serviceproxy's worden gebruikt in verschillende contexten:

Veiligheid

De volgende overwegingen bij het ontwerpen van toepassingen moeten zorgvuldig worden genoteerd wanneer u de API voor de WWSAPI-serviceproxy gebruikt:

  • De serviceproxy voert geen validatie van de gegevens uit buiten de basic profile 2.0-validatie en XML-serialisatie. Het is de verantwoordelijkheid van de toepassing om de gegevens te valideren die zijn opgenomen in de parameters die worden ontvangen als onderdeel van de aanroep.
  • Het configureren van het maximum aantal aanroepen in behandeling op de serviceproxy, met behulp van de WS_PROXY_PROPERTY_ID opsommingswaarde WS_PROXY_PROPERTY_MAX_PENDING_CALLS, biedt bescherming tegen een trage server. Het standaard maximum is 100. Toepassingen moeten voorzichtig zijn bij het wijzigen van de standaardinstellingen.
  • De serviceproxy biedt geen beveiligingsgaranties die zijn opgegeven in de WS_SECURITY_DESCRIPTION structuur die wordt gebruikt om met de server te communiceren.
  • Pas op wanneer u bericht wijzigt en kanaal standaardinstellingen voor de serviceproxy. Lees de beveiligingsoverwegingen die zijn gekoppeld aan berichten en kanalen voordat u een van de gerelateerde eigenschappen wijzigt.
  • De serviceproxy versleutelt alle referenties die in het geheugen worden opgeslagen.

De volgende API-elementen hebben betrekking op serviceproxy's.

Callback Beschrijving
WS_PROXY_MESSAGE_CALLBACK Wordt aangeroepen wanneer de kopteksten van het invoerbericht binnenkort worden verzonden of wanneer er zojuist berichtkoppen worden ontvangen.

 

Opsomming Beschrijving
WS_CALL_PROPERTY_ID Opsomming van optionele parameters voor het configureren van een aanroep in een servicebewerking aan de clientzijde.
WS_PROXY_PROPERTY_ID Opsomming van optionele parameters voor het configureren van de serviceproxy.
WS_SERVICE_PROXY_STATE De status van de serviceproxy.

 

Functie Beschrijving
WsAbandonCall- Een opgegeven aanroep op een opgegeven serviceproxy wordt afgelaten.
WsAbortServiceProxy- Hiermee annuleert u alle in behandeling zijnde invoer en uitvoer op een opgegeven serviceproxy.
WsCall- Alleen intern. Hiermee worden argumenten in een bericht geserialiseerd en via het kanaal verzonden.
WsCloseServiceProxy- Hiermee sluit u een serviceproxy voor communicatie.
WsCreateServiceProxy- Hiermee maakt u een serviceproxy.
WsFreeServiceProxy- Hiermee wordt het geheugen uitgegeven dat is gekoppeld aan een serviceproxy.
WsGetServiceProxyProperty Hiermee haalt u een opgegeven serviceproxy-eigenschap op.
WsOpenServiceProxy- Hiermee opent u een serviceproxy naar een service-eindpunt.
WsResetServiceProxy- Stelt de serviceproxy opnieuw in.

 

Handvat Beschrijving
WS_SERVICE_PROXY Een ondoorzichtig type dat wordt gebruikt om te verwijzen naar een serviceproxy.

 

Structuur Beschrijving
WS_CALL_PROPERTY Hiermee geeft u een aanroepeigenschap op.
WS_PROXY_PROPERTY. Hiermee geeft u een proxy-eigenschap.