Закрытие сеанса с помощью PollingDuplexHttpBinding
-
16-09-2019 - |
Вопрос
Я использую канал WCF PollingDuplexHttpBinding для отправки уведомлений клиентам Silverlight.По большей части это работает хорошо, но я борюсь с этим, чтобы заставить несколько базовых функций управления сеансами работать должным образом.
Самая большая проблема, с которой я столкнулся, - это попытка сообщить серверу, что клиент завершил сеанс и больше не требует никаких уведомлений.Вызов CloseAsync на клиенте останавливает отправку клиентской стороной канала запросов на получение новых уведомлений только для этого сеанса, а также отправляет SOAP-запрос CloseSession на сервер.Проблема в том, что серверная часть канала отправляет обратно 404 сообщение о том, что он не распознает действие CloseSession .Насколько я могу видеть, эта ошибка исходит из внутренних компонентов канала PollingDuplexHttpBinding и не передается приложению, чтобы можно было должным образом позаботиться о закрытии сеанса.
Кто-нибудь еще сталкивался с этой проблемой и, возможно, нашел способ обойти ее?
Решение
Это не может быть сделано по внешнему виду, Жалобы на PollingDuplexHttpBinding.
Другие советы
Что ж, статья gripe была просто потрясающей и косвенно решила связанную с этим проблему, с которой я столкнулся, когда Silverlight работал очень медленно при выполнении дуплекса по HTTP.Как ни странно, проблема вызвана включением ASP.Net Состояния сеанса на веб-сайте и использованием стека BroserHttp Silverlight (вместо стека ClientHttp).
Явор проделывает хорошую работу (в этой статье) по объяснению проблемы:
Простое решение, если у вас возникла эта проблема, заключается в регистрации маршрута для стека ClientHttp перед вызовом вашей службы.Это может быть достигнуто простым вызовом:
WebRequest.RegisterPrefix(requestUri.AbsoluteUri, WebRequestCreator.ClientHttp);
Где RequestURI - это Uri вашего сервиса.Надеюсь, это поможет.