BasicHttpBinding & SingleContext Services! - PullRequest
2 голосов
/ 21 июня 2011

У меня есть служба WCF, размещенная на IIS 7 с использованием basicHttpBinding.Служба выступает в качестве контроллера для других служб, работающих на нескольких машинах, известных как клиенты.
Служба настроена на Single ContextMode с Multiple ConurrecnyMode.Чтобы оно сохраняло состояние объекта.Моя проблема в том, что после определенного периода бездействия я вижу, что сервис снова вызывает конструктор, и поэтому он теряет все свое состояние!Любые предложения, чтобы сделать эту услугу жить вечно?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 июня 2011

По умолчанию IIS перезапускает пул приложений каждые 29 часов.

Чтобы избежать этого, вы можете перейти к настройкам перезапуска пула приложений и снять этот флажок.

enter image description here

Это по-прежнему не гарантирует 100% -ное сохранение состояния, так как IIS может быть перезапущен, пул приложений может быть перезапущен при изменении web.config и т. Д. Если состояние важно для вас, вы можете сохранить состояние скорее в базе данных, чем полагатьсяв памяти.

Другой вариант, который следует рассмотреть, - это размещение службы в службе Windows вместо IIS.

0 голосов
/ 21 июня 2011

Похоже, IIS перерабатывает ваш сервис. Помните об этом (взято из Интернета Рекомендации по предоставлению информационных услуг ):

Среда размещения IIS оптимизирован для услуг, которые не поддерживать локальное состояние в памяти. IIS перезагружает хост-процесс в ответ к множеству внешних и внутренних события, вызывающие любое нестабильное состояние хранится исключительно в памяти, чтобы быть потерял. Службы, размещенные в IIS, должны хранить их состояние вне процесс (например, в базе данных) или в кеше в памяти, который может легко воссоздать, если приложение происходит событие recycle.

Хотя есть возможность отключить утилизацию, если вам необходимо разместить IIS и заботиться о состоянии, вам, вероятно, следует поместить его в надежное место.

...