Какова цель надежного сеанса WCF?

Документация по этой теме оставляет желать лучшего. Я использую службы WCF с NetTcpBinding, размещенным в службе Windows. Проблема в том, что сеанс сбрасывается, если он неактивен в течение некоторого времени. Мне нужна сессия, которая всегда жива. Является ли надежный сеанс WCF чем-то, что может помочь? Или я могу просто играть с настройками тайм-аута?


person Andrei Sedoi    schedule 26.05.2010    source источник


Ответы (2)


Нет, надежный сеанс также истечет по времени, как и любой другой сеанс. Главный вопрос на самом деле таков: с какой стати вы хотите, чтобы ваши сеансы были «бесконечными»?? Если вам это действительно нужно, вам нужно увеличить время ожидания сеанса.

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

Ознакомьтесь с некоторыми из этих ресурсов для получения дополнительной справочной информации:

person marc_s    schedule 26.05.2010
comment
Спасибо за разъяснение, для чего нужна надежная сессия. Что касается бесконечного сеанса: у меня есть система, управляемая событиями. Когда приходит сообщение, клиент должен вызвать какую-либо службу WCF. Сообщения могут приходить каждую секунду, и важно успевать обрабатывать каждое из них. Иногда интервал между получением сообщения может быть намного больше одной секунды, скажем, один или два дня. Так что мне нужен какой-то механизм поддержания жизни. - person Andrei Sedoi; 26.05.2010
comment
@bsnote: почему? Если интервал между двумя сообщениями составляет два дня, на мой взгляд, нет никакого смысла в том, чтобы этот сеанс был активным все это время.... - person marc_s; 26.05.2010
comment
Слишком дорого создавать канал каждый раз, когда приходит сообщение, если сообщения приходят каждую секунду. Хотя я согласен с тем, что нет смысла запускать сессию, когда интервал составляет один день. - person Andrei Sedoi; 26.05.2010
comment
У меня есть почему на земле. Иногда связь инициируется с сервиса! Если соединение разорвано, это бесполезно для некоторых целей, потому что а) мы не знаем, жив ли наш сервис, б) у нас нет доступа к каким-либо трансляциям или сообщениям, предназначенным для нас конкретно. Но согласитесь, это похоже на проворачивание тайм-аутов. - person Josh Sutterfield; 18.04.2013

если вы не пользуетесь каналом, то через некоторое время он сам закроется. вы можете изменить время ожидания по умолчанию (которое составляет 10 минут) из привязки.

NetTcpBinding binding = new NetTcpBinding();
binding.ReceiveTimeout = TimeSpan.MaxValue;
binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue;

дополнительные сведения см. в MSDN.

person avrahamcool    schedule 27.02.2013