Compartir a través de


WS_SERVICE_CLOSE_CHANNEL_CALLBACK función de devolución de llamada (webservices.h)

Se invoca cuando se cierra o anula un canal en un punto de conexión. Esta devolución de llamada se llama justo antes de cerrar el canal.

Para el funcionamiento normal cuando el host del servicio se está ejecutando y el cliente cierra limpiamente el canal, esto implica que hemos recibido un cierre de sesión del cliente y estamos a punto de cerrar el canal.

El otro escenario es cuando el host del servicio pasa por un apagado de anulación o durante el procesamiento del mensaje se cumple una condición de error irrecuperable, como resultado de esto intentamos anular y, a continuación, cerrar el canal. En este caso, también antes de la anulación, llamaremos a esta devolución de llamada.

En el caso del contrato de servicio basado en sesión, esta notificación indica la anulación de la sesión. Por lo tanto, se puede destruir un estado de aplicación para la sesión dentro de esta devolución de llamada.

Sintaxis

WS_SERVICE_CLOSE_CHANNEL_CALLBACK WsServiceCloseChannelCallback;

HRESULT WsServiceCloseChannelCallback(
  [in]           const WS_OPERATION_CONTEXT *context,
  [in, optional] const WS_ASYNC_CONTEXT *asyncContext
)
{...}

Parámetros

[in] context

El contexto de la operación.

[in, optional] asyncContext

Información sobre si la función se invoca de forma asincrónica.

Valor devuelto

Esta función de devolución de llamada no devuelve un valor.

Comentarios

HrESULT devuelto solo se usa para ver si la función se completa de forma asincrónica. El error o el informe de errores a través de HRESULT no afecta de ninguna manera a la infraestructura del host del servicio.

Independientemente de si WS_SERVICE_ACCEPT_CHANNEL_CALLBACK compitió correctamente o no. Esta función siempre se activará.

Consulte también WS_SERVICE_ACCEPT_CHANNEL_CALLBACK que la aplicación puede usar para asociar el estado y se llama cuando se acepta un canal.

Para obtener una implementación de ejemplo sobre cómo usar esta devolución de llamada para desasociar el estado de sesión, consulte el ejemplo de calculadora basada en sesión.

Esta devolución de llamada se puede cancelar.

Ejemplos

HRESULT CALLBACK FreeSessionCalculator (const WS_OPERATION_CONTEXT* context,
                                        const WS_ASYNC_CONTEXT* asyncContext)
{
     HRESULT hr = NOERROR;
     SessionfulCalculator* calculator = NULL;
     hr = WsGetOperationContextProperty (context, 
                                         WS_OPERATION_CONTEXT_PROPERTY_CHANNEL_USER_STATE, 
                                         &calculator, sizeof (SessionfulCalculator*), NULL);
     if (SUCCEEDED(hr) && (calculator != NULL))
     {                                                       
         delete calculator;
     }
     return NOERROR;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado webservices.h