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.
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. |