Compartir vía


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 de 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 lo necesiten. Como alternativa, una aplicación puede reutilizar un proxy de servicio para conectarse repetidamente al mismo servicio sin el gasto de tiempo y los 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.

Diagrama en el que se muestran los estados del proxy de servicio y las llamadas de función o eventos 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 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 llamando a la función WsOpenServiceProxy, pasando una dirección dirección estructura 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 llamando 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 llamando a la funciónWsResetServiceProxy de.

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

Para obtener más información sobre cómo se usan los servidores proxy de servicio en contextos diferentes, 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 uso del valor de enumeración WS_PROXY_PROPERTY_IDWS_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 WS_SECURITY_DESCRIPTION usada para comunicarse con el servidor.
  • Tenga cuidado al modificar de mensajes y canal valores predeterminados 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 los servidores proxy de servicio.

Callback 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 solo se reciben 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 de Cancela todas las entradas y salidas pendientes en un proxy de servicio especificado.
WsCall Solo interno. Serializa argumentos en un mensaje y los envía a través del canal.
WsCloseServiceProxy de Cierra un proxy de servicio para la comunicación.
WsCreateServiceProxy de 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.

 

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