Поделиться через


функция обратного вызова WS_SERVICE_CLOSE_CHANNEL_CALLBACK (webservices.h)

Вызывается при закрытии или прерывании канала в конечной точке. Этот обратный вызов вызывается непосредственно перед закрытием канала.

Для нормальной работы, когда узел службы запущен и клиент закрыл канал, это означает, что мы получили закрытие сеанса от клиента и мы собираемся закрыть канал.

Другой сценарий заключается в том, что узел службы завершает работу прервать работу или во время обработки сообщения выполняется неустранимая ошибка. В результате этого мы пытаемся прервать работу, а затем закрыть канал. В этом случае также непосредственно перед прерыванием мы будем вызывать этот обратный вызов.

Для контракта службы на основе сеанса это уведомление означает снос сеанса. Таким образом, состояние приложения, ограниченное для сеанса, может быть уничтожено в рамках этого обратного вызова.

Синтаксис

WS_SERVICE_CLOSE_CHANNEL_CALLBACK WsServiceCloseChannelCallback;

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

Параметры

[in] context

Контекст операции.

[in, optional] asyncContext

Сведения о том, вызывается ли функция асинхронно.

Возвращаемое значение

Эта функция обратного вызова не возвращает значение.

Комментарии

Возвращаемый объект HRESULT используется только для того, чтобы проверить, выполняется ли функция асинхронно. Сбой или сообщение о сбое с помощью HRESULT никак не влияет на инфраструктуру узла службы.

Независимо от того, успешно ли соревновались WS_SERVICE_ACCEPT_CHANNEL_CALLBACK . Эта функция всегда будет запущена.

См. также WS_SERVICE_ACCEPT_CHANNEL_CALLBACK который может использоваться приложением для связывания состояния и вызывается при принятии канала.

Пример реализации использования этого обратного вызова для отмены связи с состоянием сеанса см. в примере калькулятора на основе сеанса.

Этот обратный вызов можно отменить.

Примеры

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

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Целевая платформа Windows
Header webservices.h