Condividi tramite


WS_SERVICE_CLOSE_CHANNEL_CALLBACK funzione di callback (webservices.h)

Richiamato quando un canale viene chiuso o interrotto in un endpoint. Questo callback viene chiamato subito prima di chiudere il canale.

Per il normale funzionamento quando l'host del servizio è in esecuzione e il client ha chiuso correttamente il canale, ciò implica che è stata ricevuta una chiusura di sessione dal client e stiamo per chiudere il canale.

L'altro scenario è quando l'host del servizio passa attraverso un arresto di interruzione o durante l'elaborazione del messaggio viene soddisfatta una condizione di errore irreversibile, a seguito di questo tentativo di interruzione e quindi di chiusura del canale. In questo caso, anche prima dell'interruzione, verrà chiamato questo callback.

Per il contratto di servizio basato su sessione, questa notifica indica l'disinstallazione della sessione. Di conseguenza, uno stato dell'applicazione con ambito per la sessione può essere eliminato definitivamente all'interno di questo callback.

Sintassi

WS_SERVICE_CLOSE_CHANNEL_CALLBACK WsServiceCloseChannelCallback;

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

Parametri

[in] context

Il contesto dell'operazione

[in, optional] asyncContext

Informazioni su se la funzione viene richiamata in modo asincrono.

Valore restituito

Questa funzione di callback non restituisce un valore.

Commenti

Il valore HRESULT restituito viene usato solo per verificare se la funzione viene completata in modo asincrono. L'errore o la segnalazione di errori tramite HRESULT non influisce in alcun modo sull'infrastruttura host del servizio.

Indipendentemente dal fatto che WS_SERVICE_ACCEPT_CHANNEL_CALLBACK gareggiata correttamente o meno. Questa funzione verrà sempre attivata.

Vedere anche WS_SERVICE_ACCEPT_CHANNEL_CALLBACK che può essere usato dall'applicazione per associare lo stato e viene chiamato quando viene accettato un canale.

Per un'implementazione di esempio su come usare questo callback per la disassociazione dello stato della sessione, vedere l'esempio di calcolatrice basata su sessione.

Questo callback è annullabile.

Esempio

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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione webservices.h