Где настроить и сохранить состояние приложения в проекте библиотеки служб WCF? - PullRequest
4 голосов
/ 15 января 2010

У меня есть кое-что, что я хочу инициализировать и использовать в сервисной библиотеке WCF. Если бы это было на сайте ASP.NET, я бы делал это в методе Application_Start файла global.asax, но каков эквивалент для библиотеки служб WCF?

Ответы [ 4 ]

3 голосов
/ 15 января 2010

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

2 голосов
/ 15 января 2010

Вы можете создавать сессионные компоненты WCF.

Пожалуйста, посмотрите мой ответ на этот вопрос: Sessionful wcf service в Silverlight

Вы можете даже создавать долговечные сессионные объекты, которые сохраняют свое состояние после того, как вы отсоединились от них (сохраняя его на файл или сервер SQL). Глава 4 книги Ювала Лоуи также подробно описывает это.

Это то, что вы ищете?

1 голос
/ 06 июня 2014

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

См. Эту статью для обзора: http://blogs.msdn.com/b/drnick/archive/2007/02/15/stashing-data-in-extensible-objects.aspx

А это для очень умного использования таймера: http://social.msdn.microsoft.com/Forums/vstudio/en-US/2793580f-b91a-4d4d-b98f-b7dcab70710a/wcf-periodic-methods-call-multithread

0 голосов
/ 21 февраля 2019

Я уверен, что WCF на IIS - это специализация ASP.NET. Он не заменяет ASP.NET, он расширяет его. Таким образом, ваш проект службы WCF также может включать содержимое ASP.NET - файлы .aspx и .asax вместе с файлами .svc. Таким образом, должна быть возможность буквально просто использовать Global.asax в вашем проекте WCF и использовать обычный метод Application_Start. Следует иметь в виду, что приложение ASP.NET инициализируется при запуске пула приложений и разрушается при остановке пула приложений. Таким образом, Application_Start не будет работать до тех пор, пока не поступит первый запрос, который согревает пул приложений, а затем, если пул приложений простаивает достаточно долго, IIS избавится от него, и в следующий раз будет создан новый. запрос приходит, получая свое Application_Start событие.

Я только что проверил это явным образом и могу подтвердить, что события Global запускаются. Application_Start запускается как при загрузке страницы .aspx, так и при загрузке страницы .svc для ее представления метаданных. Любопытно, что ASP.NET создает два отдельных экземпляра Global. Первый экземпляр получает only событие Application_Start, а второй экземпляр получает все другие события.

Если вы не используете IIS для размещения службы WCF, то все это не применимо.

...