Udostępnij za pośrednictwem


Serwer proxy usługi

Serwer proxy usługi to serwer proxy po stronie klienta dla usługi. Serwer proxy usługi umożliwia aplikacjom wysyłanie i odbieranie komunikatów przez kanał jako wywołania metody.

Serwery proxy usługi są tworzone zgodnie z potrzebami, otwierane, używane do wywoływania usługi i zamykane, gdy nie są już potrzebne. Alternatywnie aplikacja może ponownie użyć serwera proxy usługi, aby wielokrotnie łączyć się z tą samą usługą bez wydatków na czas i zasoby wymagane do zainicjowania serwera proxy usługi więcej niż raz. Na poniższym diagramie przedstawiono przepływ możliwych stanów serwera proxy usługi oraz wywołań funkcji lub zdarzeń prowadzących z jednego stanu do drugiego.

Diagram przedstawiający stany serwera proxy usługi oraz wywołania funkcji lub zdarzenia prowadzące z jednego stanu do innego.

Te stany serwera proxy usługi są wyliczane w wyliczenie WS_SERVICE_PROXY_STATE.

Jak pokazano na powyższym diagramie i poniższym kodzie, serwer proxy usługi jest tworzony przez wywołanie funkcji WsCreateServiceProxy. Jako parametry tego wywołania interfejs WWSAPI udostępnia następujące wyliczenia:

Akceptuje również opcjonalne parametry przy użyciu następujących typów danych:

Po utworzeniu serwera proxy usługi funkcja WsCreateServiceProxy zwraca odwołanie do serwera proxy usługi, WS_SERVICE_PROXY, za pomocą parametru out.

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

Po utworzeniu serwera proxy usługi aplikacja może otworzyć serwer proxy usługi na potrzeby komunikacji z usługą, wywołując funkcję WsOpenServiceProxy, przekazującadresstruktury zawierającej adres sieciowy punktu końcowego usługi do nawiązania połączenia.

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

Po otwarciu serwera proxy usługi aplikacja może jej używać do wykonywania wywołań do usługi.

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

Gdy aplikacja nie potrzebuje już serwera proxy usługi, zamyka serwer proxy usługi, wywołując funkcję WsCloseServiceProxy. Zwalnia również skojarzona pamięć przez wywołanie WsFreeServiceProxy.

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

Ponowne przy użyciu serwera proxy usługi

Alternatywnie po wywołaniu WsCloseServiceProxy aplikacja może ponownie użyć serwera proxy usługi, wywołując funkcję WsResetServiceProxy.

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

Aby uzyskać więcej informacji na temat sposobu użycia serwerów proxy usługi w różnych kontekstach, zobacz następujące tematy:

Bezpieczeństwo

Podczas korzystania z interfejsu API serwera proxy usługi WWSAPI należy dokładnie zauważyć następujące zagadnienia dotyczące projektowania aplikacji:

  • Serwer proxy usługi nie przeprowadzi żadnej weryfikacji danych poza weryfikacją profilu podstawowego 2.0 i serializacji XML. Aplikacja odpowiada za zweryfikowanie danych zawartych w parametrach odbieranych z powrotem w ramach wywołania.
  • Skonfigurowanie maksymalnej liczby oczekujących wywołań na serwerze proxy usługi przy użyciu wartości wyliczania WS_PROXY_PROPERTY_IDWS_PROXY_PROPERTY_MAX_PENDING_CALLSzapewnia ochronę przed powolnym działaniem serwera. Wartość domyślna to 100. Aplikacje muszą zachować ostrożność podczas modyfikowania ustawień domyślnych.
  • Serwer proxy usługi nie zapewnia żadnych gwarancji zabezpieczeń wykraczających poza te określone w strukturze WS_SECURITY_DESCRIPTION używanej do komunikacji z serwerem.
  • Podczas modyfikowania komunikatów i kanału wartości domyślnych na serwerze proxy usługi. Przed zmodyfikowaniem dowolnych powiązanych właściwości zapoznaj się z zagadnieniami dotyczącymi zabezpieczeń skojarzonymi z komunikatami i kanałami.
  • Serwer proxy usługi szyfruje wszystkie poświadczenia, które przechowuje w pamięci.

Następujące elementy interfejsu API odnoszą się do serwerów proxy usługi.

Wywołania zwrotnego Opis
WS_PROXY_MESSAGE_CALLBACK Wywoływane, gdy nagłówki komunikatu wejściowego zostaną wysłane za pośrednictwem lub gdy nagłówki komunikatów wyjściowych zostaną właśnie odebrane.

 

Wyliczenie Opis
WS_CALL_PROPERTY_ID Wylicza parametry opcjonalne do konfigurowania wywołania operacji usługi po stronie klienta.
WS_PROXY_PROPERTY_ID Wylicza opcjonalne parametry konfigurowania serwera proxy usługi.
WS_SERVICE_PROXY_STATE Stan serwera proxy usługi.

 

Funkcja Opis
WsAbandonCall Porzuca określone wywołanie określonego serwera proxy usługi.
WsAbortServiceProxy Anuluje wszystkie oczekujące dane wejściowe i wyjściowe na określonym serwerze proxy usługi.
WsCall Tylko wewnętrzne. Serializuje argumenty w wiadomości i wysyła je za pośrednictwem kanału.
WsCloseServiceProxy Zamyka serwer proxy usługi na potrzeby komunikacji.
WsCreateServiceProxy Tworzy serwer proxy usługi.
WsFreeServiceProxy Zwalnia pamięć skojarzona z serwerem proxy usługi.
WsGetServiceProxyProperty Pobiera określoną właściwość serwera proxy usługi.
WsOpenServiceProxy Otwiera serwer proxy usługi do punktu końcowego usługi.
WsResetServiceProxy Resetuje serwer proxy usługi.

 

Uchwyt Opis
WS_SERVICE_PROXY Nieprzezroczystym typem używanym do odwoływania się do serwera proxy usługi.

 

Struktura Opis
WS_CALL_PROPERTY Określa właściwość wywołania.
WS_PROXY_PROPERTY. Określa właściwość serwera proxy.