WS_SERVICE_CLOSE_CHANNEL_CALLBACK Rückruffunktion (webservices.h)

Wird aufgerufen, wenn ein Kanal auf einem Endpunkt geschlossen oder abgebrochen wird. Dieser Rückruf wird direkt vor dem Schließen des Kanals aufgerufen.

Für den normalen Betrieb, wenn der Diensthost ausgeführt wird und der Client den Kanal sauber geschlossen hat, bedeutet dies, dass wir eine Sitzungsschließung vom Client erhalten haben und wir im Begriff sind, den Kanal zu schließen.

Das andere Szenario ist, wenn der Diensthost abbricht heruntergefahren wird oder während der Verarbeitung der Nachricht eine nicht behebbare Fehlerbedingung erfüllt wird. Daher versuchen wir, den Kanal abzubrechen und dann zu schließen. Auch in diesem Fall direkt vor dem Abbruch rufen wir diesen Rückruf auf.

Bei sitzungsbasierten Dienstverträgen bedeutet diese Benachrichtigung, dass die Sitzung beendet wird. Daher kann ein Anwendungszustand, der für die Sitzung gilt, innerhalb dieses Rückrufs zerstört werden.

Syntax

WS_SERVICE_CLOSE_CHANNEL_CALLBACK WsServiceCloseChannelCallback;

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

Parameter

[in] context

Der Vorgangskontext.

[in, optional] asyncContext

Informationen dazu, ob die Funktion asynchron aufgerufen wird.

Rückgabewert

Diese Rückruffunktion gibt keinen Wert zurück.

Hinweise

Das zurückgegebene HRESULT wird nur verwendet, um zu sehen, ob die Funktion asynchron abgeschlossen wird. Fehler oder Melden von Fehlern über HRESULT wirkt sich in keiner Weise auf die Diensthostinfrastruktur aus.

Unabhängig davon, ob WS_SERVICE_ACCEPT_CHANNEL_CALLBACK erfolgreich angetreten sind oder nicht. Diese Funktion wird immer ausgelöst.

Siehe auch WS_SERVICE_ACCEPT_CHANNEL_CALLBACK , die von der Anwendung zum Zuordnen des Zustands verwendet werden kann und aufgerufen wird, wenn ein Kanal akzeptiert wird.

Eine Beispielimplementierung zur Verwendung dieses Rückrufs zum Aufheben der Zuordnung des Sitzungszustands finden Sie im sitzungsbasierten Rechnerbeispiel.

Dieser Rückruf kann abgebrochen werden.

Beispiele

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile webservices.h