Dela via


Tjänstproxy

En tjänstproxy är proxyn på klientsidan för en tjänst. Med tjänstproxyn kan program skicka och ta emot meddelanden via en kanal som metodanrop.

Tjänstproxys skapas efter behov, öppnas, används för att anropa en tjänst och stängs när de inte längre behövs. Ett program kan också återanvända en tjänstproxy för att ansluta upprepade gånger till samma tjänst utan att behöva lägga tid och resurser på att initiera en tjänstproxy mer än en gång. Följande diagram illustrerar flödet av möjliga tillstånd för tjänstproxyn och funktionsanrop eller händelser som leder från ett tillstånd till ett annat.

diagram som visar tjänstproxytillstånd och funktionsanrop eller händelser som leder från ett tillstånd till ett annat.

Dessa tjänstproxytillstånd räknas upp i WS_SERVICE_PROXY_STATE uppräkning.

Som föregående diagram och följande kod illustrerar skapas en tjänstproxy av ett anrop till funktionen WsCreateServiceProxy. Som parametrar för det här anropet tillhandahåller WWSAPI följande uppräkningar:

Den accepterar även valfria parametrar med hjälp av följande datatyper:

När tjänstproxyn har skapats returnerar funktionen WsCreateServiceProxy en referens till tjänstproxyn, WS_SERVICE_PROXY, via en out-parameter.

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

När tjänstproxyn har skapats kan programmet öppna tjänstproxyn för kommunikation till en tjänst genom att anropa funktionen WsOpenServiceProxy och skicka en adress struktur som innehåller nätverksadressen för tjänstslutpunkten att ansluta till.

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);

När tjänstproxyn har öppnats kan programmet använda den för att göra anrop till tjänsten.

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

När programmet inte längre behöver tjänstproxyn stänger det tjänstproxyn genom att anropa funktionen WsCloseServiceProxy. Det frigör också det associerade minnet genom att anropa WsFreeServiceProxy.

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

Återanvända tjänstproxyn

Alternativt kan ett program efter att ha anropat WsCloseServiceProxy återanvända tjänstproxyn genom att anropa funktionen WsResetServiceProxy.

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

Mer information om hur tjänstproxy används i olika kontexter finns i följande avsnitt:

Säkerhet

Följande överväganden för programdesign bör noteras noggrant när du använder WWSAPI-tjänstproxy-API:et:

  • Tjänstproxyn utför ingen validering av data utöver Basic Profile 2.0-validering och XML-serialisering. Det är programmets ansvar att verifiera data som finns i parametrarna som tas emot tillbaka som en del av anropet.
  • Att konfigurera det maximala antalet väntande anrop på tjänstproxyn med hjälp av WS_PROXY_PROPERTY_ID uppräkningsvärdet WS_PROXY_PROPERTY_MAX_PENDING_CALLSger skydd mot en server som körs långsamt. Standardvärdet är 100. Program måste vara försiktiga när standardinställningarna ändras.
  • Tjänstproxyn ger inga säkerhetsgarantier utöver de som anges i WS_SECURITY_DESCRIPTION struktur som används för att kommunicera med servern.
  • Var försiktig när du ändrar meddelande och kanal standardvärden för tjänstproxyn. Läs de säkerhetsöverväganden som är associerade med meddelanden och kanaler innan du ändrar någon av de relaterade egenskaperna.
  • Tjänstproxy krypterar alla autentiseringsuppgifter som den har i minnet.

Följande API-element relaterar till tjänstproxys.

Motringning Beskrivning
WS_PROXY_MESSAGE_CALLBACK Anropas när huvudena i indatameddelandet är på väg att skickas via eller när ett utdatameddelandehuvuden precis tas emot.

 

Uppräkning Beskrivning
WS_CALL_PROPERTY_ID Räknar upp valfria parametrar för att konfigurera ett anrop på en tjänståtgärd på klientsidan.
WS_PROXY_PROPERTY_ID Räknar upp valfria parametrar för att konfigurera tjänstproxyn.
WS_SERVICE_PROXY_STATE Tjänstproxyns tillstånd.

 

Funktion Beskrivning
WsAbandonCall Avger ett angivet anrop på en angiven tjänstproxy.
WsAbortServiceProxy Avbryter alla väntande indata och utdata på en angiven tjänstproxy.
WsCall Endast internt. Serialiserar argument till ett meddelande och skickar det över kanalen.
WsCloseServiceProxy Stänger en tjänstproxy för kommunikation.
WsCreateServiceProxy Skapar en tjänstproxy.
WsFreeServiceProxy Frigör minnet som är associerat med en tjänstproxy.
WsGetServiceProxyProperty Hämtar en angiven tjänstproxyegenskap.
WsOpenServiceProxy Öppnar en tjänstproxy till en tjänstslutpunkt.
WsResetServiceProxy Återställer tjänstproxy.

 

Handtag Beskrivning
WS_SERVICE_PROXY En ogenomskinlig typ som används för att referera till en tjänstproxy.

 

Struktur Beskrivning
WS_CALL_PROPERTY Anger en anropsegenskap.
WS_PROXY_PROPERTY. Anger en proxyegenskap.