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.

Diagram showing the service proxy states and the function calls or events that lead from one state to another.

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:

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.