Compartilhar via


WS_SERVICE_CLOSE_CHANNEL_CALLBACK função de retorno de chamada (webservices.h)

Invocado quando um canal é fechado ou anulado em um ponto de extremidade. Esse retorno de chamada é chamado logo antes de fecharmos o canal.

Para uma operação normal quando o host de serviço está em execução e o cliente fechou o canal de forma limpa, isso implica que recebemos um fechamento de sessão do cliente e estamos prestes a fechar o canal.

O outro cenário é quando o host de serviço está passando por um desligamento de anulação ou durante o processamento da mensagem uma condição de erro irrecuperável é atendida, como resultado disso, tentamos anular e fechar o canal. Nesse caso, bem antes da anulação, chamaremos esse retorno de chamada.

Para o contrato de serviço baseado em sessão, essa notificação significa a desativação da sessão. Portanto, um estado de aplicativo com escopo para a sessão pode ser destruído dentro desse retorno de chamada.

Sintaxe

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

O contexto da operação.

[in, optional] asyncContext

Informações sobre se a função está sendo invocada de forma assíncrona.

Retornar valor

Essa função de retorno de chamada não retorna um valor.

Comentários

O HRESULT retornado só é usado para ver se a função está sendo concluída de forma assíncrona. Falha ou relatório de falha por meio do HRESULT não afeta de forma alguma a infraestrutura do host de serviço.

Independentemente de WS_SERVICE_ACCEPT_CHANNEL_CALLBACK competiram com êxito ou não. Essa função sempre será acionada.

Consulte também WS_SERVICE_ACCEPT_CHANNEL_CALLBACK que pode ser usado pelo aplicativo para associar o estado e é chamado quando um canal é aceito.

Para obter um exemplo de implementação sobre como usar esse retorno de chamada para desassociar o estado da sessão, consulte o exemplo de calculadora baseada em sessão.

Esse retorno de chamada é cancelável.

Exemplos

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 Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho webservices.h