2014-12-04 4 views
1

Windows 서비스 내부에서 자체 호스팅 (OWIN)을 실행하는 웹 API 앱을 만들었습니다. 앱의 웹 API 부분은 Quartz.NET에 작업을 제출하기위한 래퍼입니다. 작업 지속성을 위해 AdoJobStore를 사용하고 있습니다.Windows 서비스에서 실행되는 Quartz.NET이 디버그에서는 정상적으로 작동하지만 릴리스에서는 정상적으로 동작하지 않는 이유는 무엇입니까?

디버그 모드에서 빌드하면 모든 것이 아름답게 작동합니다. 나는 단위 테스트를 통해 작업을 제출하고 읽은 다음 삭제할 수 있습니다. 테스트는 완벽하게 통과합니다. 내가 릴리스 모드에서 실행할 때, 서비스를 시작하는 데 실패하고 나에게 제공합니다

오류 1053 : 서비스가 시작이나 제어 요청에시기 적절하게 응답하지 않았습니다

I

예외 정보 : System.IO.FileNotFoundException 스택 : Quartz.Impl.StdSchedulerFactory.Initialize에서() Quartz.Impl.StdSchedulerFactory에서 로그 파고, 나는 루트 오류가 있음을 참조하십시오. ARI.Scheduler.WindowsService.Program.Main에서 GetScheduler() 는()

내 첫번째 생각은의 App.config이 릴리스 폴더에서 누락해야한다고했다. 그러나 실제로 거기에 있습니다. 그래서 StdSchedulerFactory를 프로그래밍 방식으로 구성하려고했습니다. 그러나 오류가 남아 있습니다.

편집 :

좋아, 내가 시도 - 캐치에서 GetScheduler 호출()를 포장 한 조금 더 파고 내가 이벤트 로그에 대한 기본 예외를 쓰고 있어요. 메시지 그것은이 :

예외 정보 : System.TypeInitializationException 스택 : Quartz.Impl.StdSchedulerFactory.Initialize (System.Collections.Specialized.NameValueCollection)에서 Quartz.Impl.StdSchedulerFactory.ValidateConfiguration() 에서 ARI.Scheduler.WindowsService.Program.Main에서 ARI.Scheduler.WindowsService.Program.InitializeScheduler() ()

에서 나는이 일에 벽에 내 머리를 때리고 있어요. Quartz.NET 팀의 도움을 주시면 감사하겠습니다. 감사.

+0

디버그 모드에서 app을 실행하면 Quartz.NET 서비스를 동시에 시작합니까? – TheLittleHawk

+0

저는 원래 Windows 서비스의 OnStart() 메소드에서 Quartz.NET 스케줄러 서비스를 시작했습니다. 그건 디버그 빌드에서 잘 작동합니다. 그런 다음 오류 1053이 발생하기 시작하면서 Windows 서비스 및 오류 1053에 대한 웹에서 발견 된 몇 가지 게시물에서 제안 된 것처럼 스레드에서 Quartz.NET 초기화를 해고했습니다. 다시 말하지만 디버그에서는 문제가 없습니다. Windows 서비스가 시작될 때 빌드를 릴리스 할 때 여전히 오류가 발생합니다. 그래도 여전히 작동하지 않습니다. – NovaJoe

+0

내가 이해할 수없는 것은 Quartz.Impl.StdSchedulerFactory.Initialize()의 System.IO.FileNotFoundException이다. 이로 인해 App.config가 누락되었다고 믿을 수는 있지만 그렇지 않습니다. 그래서, 아마도 일부 어셈블리가 빠져 있다고 믿게 될 것입니다. 하지만 디버그가 아닌 Release에서 누락 된 이유는 무엇입니까? 각 빌드 유형의 출력 폴더에는 똑같은 파일이 포함되어 있으므로 릴리스 폴더에 누락 된 것이 나타나지 않습니다. – NovaJoe

답변

1

소노파치. 그것은 log4net 어셈블리 버전 불일치였습니다. Gawd !!!

<dependentAssembly> 
    <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-1.2.11.0" newVersion="1.2.11.0" /> 
</dependentAssembly> 

은 할 필요가 :

<dependentAssembly> 
    <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-1.2.11.0" newVersion="1.2.13.0" /> 
</dependentAssembly> 

주 대신 1.2.11.0 인의 1.2.13.0에서 3. 이것은 어셈블리 문제 일 가능성에 대해 알려준 게시물이었습니다. The type initializer for 'Quartz.Impl.StdSchedulerFactory' threw an exception

내 어셈블리 버전에 더주의를 기울여야 할 것 같네요. 디버그와 릴리스가 현재 동일한 App.config를 사용하고 있기 때문에 왜 디버그 모드가 정상적으로 작동하는지 이해할 수 없습니다. 기묘한.

관련 문제