문제점 :이 서비스가 시작될 때 DB가 오프라인 인 경우 시작시 var container = new BootStrapper().Container;
이이 열에서 실패하므로이 서비스가 시작되지 않습니다.db가 castle windsor 및 nhibernate 기능과 오프라인 인 경우 Windows 서비스 시작을 다시 시도하는 방법은 무엇입니까?
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>();
}
Windows 서비스가 시작되면 앱 서비스가 시작되지 (가 업데이트 또는 백업이 DB에 진행되고있다 할 수있는 경우) 30초보다 오래 걸립니다.
NHibernateFacility가있는 NHibernate, Castle Windsor를 사용하고 있습니다.
상황은 나는 시도했다 : 그것은 뷰 또는 컨트롤러에 도달하기 전에 실패 때문에
가는 서비스 시작 이벤트에서 그것을 할 수 없습니다. 뷰 및 컨트롤러에는 Castle IXC 권장 사항에 따라 주입 된 IoCFactory 을 통해서만 IoC 컨테이너에 직접 액세스 할 수있는 이 없습니다.
나는 주에 스레드를 생성하고 재시도 루프 거기를 시작하지만, 서비스가 ServiceBase.Run 방법 내에서 "대기"때문에, 내가 올바른 얻을 수없는 것하려고했습니다 으로 돌아가 재시도 루프 중에 "가짜 시작"상태가됩니다.
- 는 서비스 시작 제한 시간을 연장 조사하지만, 그 전에 실패하고 생산 현장의 수백에서 시스템 전체 변경 옵션이 아니므로 servicebase/뷰에 액세스 할 수 없습니다.
질문 : 설계시 DB가 오프라인 일 때 Windows 서비스가 "시작"되도록하려면 어떻게해야합니까?
처음에는 "hbm2ddl.keywords"를 "none"으로 설정해야하는 NHibernate 문제로 인해 두 번째 글 머리 기호 (두 번째 글 머리 기호는 두 번째 글 머리 기호보다 우수합니다. –
예,하지만 구조가 더 넓습니다. 예를 들어, 서비스가 작업을 시작하거나 클라이언트 요청을 청취하기 전에 데이터베이스에서 정보를 읽어야 할 수 있습니다. –