Dienstproxy
Ein Dienstproxy ist der clientseitige Proxy für einen Dienst. Der Dienstproxy ermöglicht Es Anwendungen, Nachrichten über einen Kanal als Methodenaufrufe zu senden und zu empfangen.
Dienstproxys werden nach Bedarf erstellt, geöffnet, zum Aufrufen eines Diensts verwendet und geschlossen, wenn sie nicht mehr benötigt werden. Alternativ kann eine Anwendung einen Dienstproxy wiederverwenden, um wiederholt eine Verbindung mit demselben Dienst herzustellen, ohne dass zeitaufwendig und ressourcen für die Initialisierung eines Dienstproxys mehr als einmal erforderlich sind. Das folgende Diagramm veranschaulicht den Fluss der möglichen Zustände des Dienstproxys und der Funktionsaufrufe oder Ereignisse, die von einem Zustand zu einem anderen führen.
Diese Dienstproxyzustände werden in der WS_SERVICE_PROXY_STATE Enumeration aufgezählt.
Wie das vorangehende Diagramm und der folgende Code veranschaulichen, wird ein Dienstproxy durch einen Aufruf der WsCreateServiceProxy--Funktion erstellt. Als Parameter für diesen Aufruf stellt WWSAPI die folgenden Enumerationen bereit:
Außerdem werden optionale Parameter mit den folgenden Datentypen akzeptiert:
Wenn der Dienstproxy erstellt wurde, gibt die WsCreateServiceProxy--Funktion einen Verweis auf den Dienstproxy, WS_SERVICE_PROXY, über einen Out-Parameter zurück.
WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
WS_TCP_CHANNEL_BINDING,
WS_CHANNEL_TYPE_DUPLEX_SESSION,
NULL,
NULL,
0,
NULL,
0,
&serviceProxy,
error);
Wenn der Dienstproxy erstellt wurde, kann die Anwendung den Dienstproxy für die Kommunikation mit einem Dienst öffnen, indem sie die WsOpenServiceProxy--Funktion aufruft und eine Adresse Struktur übergibt, die die Netzwerkadresse des Dienstendpunkts enthält, mit der eine Verbindung hergestellt werden soll.
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);
Wenn der Dienstproxy geöffnet wurde, kann die Anwendung sie verwenden, um Aufrufe an den Dienst zu tätigen.
hr = Add(
serviceProxy,
1,
2,
&result,
NULL,
0,
NULL,
error);
Wenn die Anwendung den Dienstproxy nicht mehr benötigt, wird der Dienstproxy durch Aufrufen der WsCloseServiceProxy-Funktion geschlossen. Außerdem wird der zugeordnete Arbeitsspeicher freigegeben, indem WsFreeServiceProxy-aufgerufen wird.
hr = WsCloseServiceProxy(
serviceProxy,
NULL,
error);
hr = WsFreeServiceProxy(
serviceProxy,
error);
Erneutes Verwenden des Dienstproxys
Alternativ kann eine Anwendung nach dem Aufrufen von WsCloseServiceProxy den Dienstproxy wiederverwenden, indem sie die funktion WsResetServiceProxy aufruft.
hr = WsResetServiceProxy(
serviceProxy,
error);
Weitere Informationen zur Verwendung von Dienstproxys in verschiedenen Kontexten finden Sie in den folgenden Themen:
- Dienstproxy und Sitzungen
- Service Operation
- clientseitigen Dienstvorgänge
- HttpCalculatorClientExample
Sicherheit
Bei Verwendung der WWSAPI-Dienstproxy-API sollten die folgenden Überlegungen zum Anwendungsentwurf sorgfältig beachtet werden:
- Der Dienstproxy führt keine Überprüfung der Daten über die Basic Profile 2.0-Überprüfung und XML-Serialisierung hinaus durch. Es liegt in der Verantwortung der Anwendung, die in den Parametern enthaltenen Daten zu überprüfen, die sie als Teil des Aufrufs zurückerhalten.
- Das Konfigurieren der maximalen Anzahl ausstehender Aufrufe für den Dienstproxy mithilfe des WS_PROXY_PROPERTY_ID Enumerationswerts WS_PROXY_PROPERTY_MAX_PENDING_CALLSbietet Schutz vor einem langsam ausgeführten Server. Der Standardwert ist 100. Anwendungen müssen beim Ändern der Standardwerte vorsichtig sein.
- Der Dienstproxy bietet keine Sicherheitsgarantien, die über die in der WS_SECURITY_DESCRIPTION Struktur hinausgehen, die für die Kommunikation mit dem Server verwendet wird.
- Achten Sie darauf, Nachricht und Kanal Standardeinstellungen für den Dienstproxy zu ändern. Lesen Sie die Sicherheitsüberlegungen, die Nachrichten und Kanälen zugeordnet sind, bevor Sie eine der zugehörigen Eigenschaften ändern.
- Der Dienstproxy verschlüsselt alle Anmeldeinformationen, die im Arbeitsspeicher gespeichert werden.
Die folgenden API-Elemente beziehen sich auf Dienstproxys.
Rückruf | Beschreibung |
---|---|
WS_PROXY_MESSAGE_CALLBACK | Wird aufgerufen, wenn die Kopfzeilen der Eingabenachricht gerade gesendet werden sollen oder wenn gerade eine Ausgabenachrichtenkopfzeile empfangen wird. |
Aufzählung | Beschreibung |
---|---|
WS_CALL_PROPERTY_ID | Listet optionale Parameter zum Konfigurieren eines Aufrufs für einen clientseitigen Dienstvorgang auf. |
WS_PROXY_PROPERTY_ID | Listet optionale Parameter zum Konfigurieren des Dienstproxys auf. |
WS_SERVICE_PROXY_STATE | Der Status des Dienstproxys. |
Funktion | Beschreibung |
---|---|
WsAbandonCall- | Gibt einen angegebenen Aufruf für einen angegebenen Dienstproxy auf. |
WsAbortServiceProxy- | Bricht alle ausstehenden Eingaben und Ausgaben für einen angegebenen Dienstproxy ab. |
WsCall- | Nur intern. Serialisiert Argumente in eine Nachricht und sendet sie über den Kanal. |
WsCloseServiceProxy- | Schließt einen Dienstproxy für die Kommunikation. |
WsCreateServiceProxy- | Erstellt einen Dienstproxy. |
WsFreeServiceProxy- | Gibt den Speicher frei, der einem Dienstproxy zugeordnet ist. |
WsGetServiceProxyProperty- | Ruft eine angegebene Dienstproxyeigenschaft ab. |
WsOpenServiceProxy- | Öffnet einen Dienstproxy für einen Dienstendpunkt. |
WsResetServiceProxy- | Setzt den Dienstproxy zurück. |
Griff | Beschreibung |
---|---|
WS_SERVICE_PROXY | Ein undurchsichtiger Typ, der verwendet wird, um auf einen Dienstproxy zu verweisen. |
Struktur | Beschreibung |
---|---|
WS_CALL_PROPERTY | Gibt eine Aufrufeigenschaft an. |
WS_PROXY_PROPERTY. | Gibt eine Proxyeigenschaft an. |