Función WsAbandonMessage (webservices.h)
Omite el resto de un mensaje especificado en un canal especificado.
Sintaxis
HRESULT WsAbandonMessage(
[in] WS_CHANNEL *channel,
[in] WS_MESSAGE *message,
[in, optional] WS_ERROR *error
);
Parámetros
[in] channel
Puntero a una estructura de WS_CHANNEL que representa el canal en el que se está leyendo o escribiendo el mensaje.
[in] message
Puntero a una estructura de WS_MESSAGE que representa el mensaje que se va a abandonar. Debe ser el mismo mensaje que se pasó a la función WsWriteMessageStart o WsReadMessageStart .
[in, optional] error
Puntero a una estructura de WS_ERROR que recibe información de error adicional si se produce un error en la función.
Valor devuelto
Si la función se realiza correctamente, devuelve NO_ERROR; de lo contrario, devuelve un código de error HRESULT.
Código devuelto | Descripción |
---|---|
|
El canal no está en el estado WS_CHANNEL_STATE_OPEN o WS_CHANNEL_STATE_FAULTED. (Para los estados del canal, consulte la enumeración WS_CHANNEL_STATE ). |
|
El mensaje especificado no se está leyendo ni escribiendo actualmente en el canal especificado. |
Comentarios
WsAbandonMessage se usa para omitir la lectura o escritura del contenido restante de un mensaje, lo que permite que el siguiente mensaje del canal se lea o escriba. A este respecto, es una alternativa a las funciones WsReadMessageEnd o WsWriteMessageEnd , como se muestra en el diagrama de estado siguiente:
En el caso de las operaciones de lectura, una aplicación normalmente llama a WsAbandonMessage cuando no es necesario que la aplicación siga leyendo los datos del mensaje, por ejemplo, si el mensaje no cumple los requisitos de la aplicación. Esta función también se puede usar si el mensaje contiene XML con formato incorrecto o si el lector XML ha generado un error al leer el mensaje.
Si el canal se transmite (vea el valor WS_STREAMED_INPUT_TRANSFER_MODE de la enumeración WS_TRANSFER_MODE ), el resto de los datos del mensaje transmitido se lee y descarta automáticamente con la siguiente llamada a WsReadMessageStart o WsCloseChannel para el canal. Si el canal no se transmite, los datos del mensaje almacenados en búfer no leídos simplemente se descartan.
En el caso de las operaciones de escritura, una aplicación normalmente llama a WsAbandonMessage cuando la aplicación no puede seguir escribiendo el mensaje porque ha encontrado algún error, como uno devuelto por el escritor XML, o debe dejar de generar el mensaje por algún otro motivo.
Si el canal se transmite (vea el valor WS_STREAMED_INPUT_TRANSFER_MODE de la enumeración de WS_TRANSFER_MODE ), los datos del mensaje se truncarán y pueden producir errores cuando lo lea la parte remota. Si el canal no se transmite, los datos almacenados en búfer del mensaje se descartan simplemente (ya que nunca se transmitieron).
Esta función permite al usuario del canal mantener el canal abierto y enviar o recibir mensajes adicionales (por ejemplo, enviar un error), aunque se haya producido un error. Por el contrario, WsAbortChannel hará que se produzca un error en el canal. Un uso típico es primero intentar abandonar el mensaje y enviar un error. Si se produce un error, se puede anular el canal.
Esta función no realiza ninguna E/S de bloqueo.
Esta función solo es válida cuando el canal está en los estados WS_CHANNEL_STATE_OPEN o WS_CHANNEL_STATE_FAULTED. (Para los estados del canal, consulte la enumeración WS_CHANNEL_STATE ).
El mensaje especificado debe ser el mensaje actual que se está leyendo o el mensaje actual que se está escribiendo para el canal especificado.
Si se llama correctamente, esta función no producirá un error (por ejemplo, debido a la falta de recursos del sistema).
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 7 [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2008 R2 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | webservices.h |
Library | WebServices.lib |
Archivo DLL | WebServices.dll |