Проблема: если БД находится в автономном режиме, когда эта служба запущена, эта служба не запускается, поскольку она не работает в этой строке: var container = new BootStrapper().Container;
при запуске.Как запустить службу запуска Windows, если db отключен с помощью виндзора замка и объекта nhibernate?
private static void Main(string[] args)
{
Logger.Info("Engine Service is bootstrapping...");
AppDomain.CurrentDomain.UnhandledException += UncaughtExceptions.DomainException;
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
var container = new BootStrapper().Container;
var controller = container.Resolve<EngineController>();
ServiceBase.Run(controller.MainView as ServiceBase);
container.Dispose();
}
Причина она не существует, что он работает этот код, где он добавляет NHibernate объект container.AddFacility<NHibernateFacility>();
и терпит неудачу с тайм-аут соединения.
public void Install(IWindsorContainer container, IConfigurationStore store)
{
var isAutoTxFacilityRegistered = container.Kernel.GetFacilities().Any(f => f is AutoTxFacility);
if (!isAutoTxFacilityRegistered) container.AddFacility<AutoTxFacility>();
container.Register(
Component.For<INHibernateInstaller>().ImplementedBy<CieFluentInstaller>().IsDefault().LifestyleTransient(),
Classes.FromThisAssembly().Pick().WithService.DefaultInterfaces().LifestyleTransient()
);
var isNHibernateFacilityRegistered = container.Kernel.GetFacilities().Any(f => f is NHibernateFacility);
if (!isNHibernateFacilityRegistered) container.AddFacility<NHibernateFacility>();
}
Если служба окна запуска занимает больше времени, чем за 30 секунд (что он может, если обновление или резервные копии в настоящее время проводится на БД) сервис приложения не запускается.
Я использую FluentNhibernate, NHibernate, Castle Windsor с NHibernateFacility.
Что я пробовал:
Не может это сделать из события начала обслуживания, потому что он не до того, как получает представления или контроллер. Вид и контроллер не имеют прямого доступа к контейнеру IoC, только с помощью впрыскиваемого IoCFactory в соответствии с рекомендациями Castle Windsor.
Я пытался породить поток в основной и запустить его там с петля, повторная попытка, но потому, что служба «ждет» внутри метода ServiceBase.Run, я не могу показаться, чтобы получить правильный возвращается к , делая это «поддельным стартом» в цикле повтора.
исследуемых удлиняя начала тайм-аут службы, но не может получить доступ к ServiceBase/вида, так как он не до этого и вся системы изменения в сотнях производственных площадок не вариант.
Вопрос: Как я могу сделать это так, чтобы служба Windows «запускалась», когда БД отключена, учитывая дизайн?
В то время как хорошая мысль, это не сработало лучше, чем мой второй маркер (они были очень похожи) из-за проблемы NHibernate, требующей «hbm2ddl.keywords» сначала установить «none». –
Да, но моя структура имеет более широкие приложения. Например, службе, возможно, потребуется прочитать информацию из базы данных, прежде чем она сможет начать выполнять ее работу или начать прослушивание клиентских запросов. –