Proxy de servicio
Un proxy de servicio es el proxy del lado cliente para un servicio. El proxy de servicio permite a las aplicaciones enviar y recibir mensajes a través de un canal como llamadas de método.
Los servidores proxy de servicio se crean según sea necesario, se abren, se usan para llamar a un servicio y se cierran cuando ya no son necesarios. Como alternativa, una aplicación puede reutilizar un proxy de servicio para conectarse repetidamente al mismo servicio sin el gasto de tiempo y recursos necesarios para inicializar un proxy de servicio más de una vez. En el diagrama siguiente se muestra el flujo de los posibles estados del proxy de servicio y las llamadas o eventos de función que conducen de un estado a otro.
Estos estados de proxy de servicio se enumeran en la enumeración WS_SERVICE_PROXY_STATE .
Como se muestra en el diagrama anterior y en el código siguiente, se crea un proxy de servicio mediante una llamada a la función WsCreateServiceProxy . Como parámetros para esta llamada, WWSAPI proporciona las siguientes enumeraciones:
También acepta parámetros opcionales mediante los siguientes tipos de datos:
Cuando se ha creado el proxy de servicio, la función WsCreateServiceProxy devuelve una referencia al proxy de servicio, WS_SERVICE_PROXY, a través de un parámetro out.
WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
WS_TCP_CHANNEL_BINDING,
WS_CHANNEL_TYPE_DUPLEX_SESSION,
NULL,
NULL,
0,
NULL,
0,
&serviceProxy,
error);
Cuando se ha creado el proxy de servicio, la aplicación puede abrir el proxy de servicio para la comunicación con un servicio mediante una llamada a la función WsOpenServiceProxy , pasando una estructura de direcciones que contiene la dirección de red del punto de conexión de servicio al que conectarse.
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);
Cuando se ha abierto el proxy de servicio, la aplicación puede usarla para realizar llamadas al servicio.
hr = Add(
serviceProxy,
1,
2,
&result,
NULL,
0,
NULL,
error);
Cuando la aplicación ya no necesita el proxy de servicio, cierra el proxy de servicio mediante una llamada a la función WsCloseServiceProxy . También libera la memoria asociada llamando a WsFreeServiceProxy.
hr = WsCloseServiceProxy(
serviceProxy,
NULL,
error);
hr = WsFreeServiceProxy(
serviceProxy,
error);
Reutilización del proxy de servicio
Como alternativa, después de llamar a WsCloseServiceProxy , una aplicación puede reutilizar el proxy de servicio mediante una llamada a la función WsResetServiceProxy .
hr = WsResetServiceProxy(
serviceProxy,
error);
Para obtener más información sobre cómo se usan los servidores proxy de servicio en distintos contextos, consulte los temas siguientes:
- Proxy de servicio y sesiones
- Operación de servicio
- Operaciones de servicio del lado cliente
- HttpCalculatorClientExample
Seguridad
Las siguientes consideraciones de diseño de aplicaciones deben tenerse en cuenta al usar la API de proxy del servicio WWSAPI:
- El proxy de servicio no realizará ninguna validación de los datos más allá de la validación de Basic Profile 2.0 y la serialización XML. Es responsabilidad de la aplicación validar los datos contenidos en los parámetros que recibe como parte de la llamada.
- La configuración del número máximo de llamadas pendientes en el proxy de servicio, mediante el WS_PROXY_PROPERTY_ID valor de enumeración WS_PROXY_PROPERTY_MAX_PENDING_CALLS, proporciona protección contra un servidor en ejecución lenta. El máximo predeterminado es 100. Las aplicaciones deben tener cuidado al modificar los valores predeterminados.
- El proxy de servicio no proporciona ninguna garantía de seguridad más allá de las especificadas en la estructura de WS_SECURITY_DESCRIPTION usada para comunicarse con el servidor.
- Tenga cuidado al modificar los valores predeterminados de mensaje y canal en el proxy de servicio. Lea las consideraciones de seguridad asociadas a los mensajes y canales antes de modificar cualquiera de las propiedades relacionadas.
- El proxy de servicio cifra todas las credenciales que mantiene en la memoria.
Los siguientes elementos de API se relacionan con servidores proxy de servicio.
Devolución de llamada | Descripción |
---|---|
WS_PROXY_MESSAGE_CALLBACK | Se invoca cuando los encabezados del mensaje de entrada están a punto de enviarse a través de o cuando se acaban de recibir encabezados de mensaje de salida. |
Enumeración | Descripción |
---|---|
WS_CALL_PROPERTY_ID | Enumera los parámetros opcionales para configurar una llamada en una operación de servicio del lado cliente. |
WS_PROXY_PROPERTY_ID | Enumera los parámetros opcionales para configurar el proxy de servicio. |
WS_SERVICE_PROXY_STATE | Estado del proxy de servicio. |
Función | Descripción |
---|---|
WsAbandonCall | Abandona una llamada especificada en un proxy de servicio especificado. |
WsAbortServiceProxy | Cancela todas las entradas y salidas pendientes en un proxy de servicio especificado. |
WsCall | Solo interno. Serializa los argumentos en un mensaje y los envía a través del canal. |
WsCloseServiceProxy | Cierra un proxy de servicio para la comunicación. |
WsCreateServiceProxy | Crea un proxy de servicio. |
WsFreeServiceProxy | Libera la memoria asociada a un proxy de servicio. |
WsGetServiceProxyProperty | Recupera una propiedad de proxy de servicio especificada. |
WsOpenServiceProxy | Abre un proxy de servicio en un punto de conexión de servicio. |
WsResetServiceProxy | Restablece el proxy de servicio. |
Handle | Descripción |
---|---|
WS_SERVICE_PROXY | Tipo opaco que se usa para hacer referencia a un proxy de servicio. |
Estructura | Descripción |
---|---|
WS_CALL_PROPERTY | Especifica una propiedad de llamada. |
WS_PROXY_PROPERTY. | Especifica una propiedad de proxy. |