Закрытие сеанса с помощью PollingDuplexHttpBinding

Я использую канал WCF PollingDuplexHttpBinding для отправки уведомлений клиентам Silverlight. По большей части это работает хорошо, но я борюсь за то, чтобы несколько основных функций управления сеансом работали правильно.

Самая большая проблема, с которой я столкнулся, — это попытка сообщить серверу, что клиент завершил сеанс и больше не требует никаких уведомлений. Вызов CloseAsync на клиенте останавливает клиентскую сторону канала от отправки запросов на новые уведомления только для этого сеанса, а также отправляет запрос SOAP CloseSession на сервер. Проблема заключается в том, что серверная сторона канала отправляет обратно ошибку 404, говоря, что не распознает действие CloseSession. Насколько я вижу, эта ошибка связана с внутренними компонентами канала PollingDuplexHttpBinding и не доходит до приложения, чтобы можно было должным образом позаботиться о закрытии сеанса.

Кто-нибудь еще сталкивался с этой проблемой и, возможно, нашел способ ее обойти?


person sipsorcery    schedule 04.11.2009    source источник


Ответы (2)


По внешнему виду этого не сделать, жалуется на PollingDuplexHttpBinding.

person sipsorcery    schedule 17.11.2009

Что ж, эта статья с жалобами была просто потрясающей и косвенно решила связанную с этим проблему, с которой я столкнулся, когда Silverlight работал очень медленно при выполнении Duplex через HTTP. Обычно проблема возникает из-за того, что на веб-сайте включено состояние сеанса ASP.Net и используется стек Silverlight BroserHttp (вместо стека ClientHttp).

Явор хорошо объясняет проблему (в этой статье):

http://blogs.msdn.com/b/silverlightws/archive/2009/09/30/имеющий-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes-silverlight-calls-to-be-slow.aspx

Простое исправление, если у вас возникла эта проблема, — зарегистрировать маршрут для стека ClientHttp перед вызовом службы. Это можно сделать, просто позвонив:

WebRequest.RegisterPrefix(requestUri.AbsoluteUri, WebRequestCreator.ClientHttp);

Где requestUri — это Uri вашего сервиса. Надеюсь это поможет.

person absolutdeno    schedule 14.02.2011