Reflection Quartz.NET作为Windows服务,在GAC中具有依赖项

Reflection Quartz.NET作为Windows服务,在GAC中具有依赖项,reflection,gac,quartz.net,quartz.net-2.0,Reflection,Gac,Quartz.net,Quartz.net 2.0,我已经将Quartz设置为windows服务(如果有必要,可以使用AdoJobStore),并设法让ASP.NET站点通过远程处理与它通信,以添加/安排一个位于我自己的项目公司.project.ServiceLayer中的自定义IJob 这花了我一段时间,但只要Company.Project.ServiceLayer.dll同时存在于windows服务文件夹和网站bin文件夹中,我的开发计算机上的所有工作都正常。但是,在生产环境中,需要将Company.Project.ServiceLayer.

我已经将Quartz设置为windows服务(如果有必要,可以使用AdoJobStore),并设法让ASP.NET站点通过远程处理与它通信,以添加/安排一个位于我自己的项目公司.project.ServiceLayer中的自定义IJob

这花了我一段时间,但只要Company.Project.ServiceLayer.dll同时存在于windows服务文件夹和网站bin文件夹中,我的开发计算机上的所有工作都正常。但是,在生产环境中,需要将Company.Project.ServiceLayer.dll添加到GAC中。我尝试在我的开发机器上模拟这个,从服务文件夹中删除Company.Project.ServiceLayer.dll,并使用gacutil将其添加到GAC中。不幸的是,现在当服务启动并尝试实例化我的IJob实例时,它无法从GAC加载程序集,并引发异常“无法加载文件或程序集”(详细信息如下)

我猜Quartz在[QRTZ_JOB_DETAILS].[JOB_CLASS_NAME]字段中使用反射和DB值来尝试加载类?我可能完全错了,但因为这个值(“Company.Product.ServiceLayer.SchedulerJobs.QuintilesEasyJob,Company.Product.ServiceLayer”)只是类的部分描述(它缺少版本和公钥令牌)这难道不意味着.NET在进行反射时不会查看GAC,因为只有强名称的dll才能在GAC中生存吗?这就是我的GAC设置现在失败的原因吗?Quartz windows服务可以在GAC中使用dll吗

非常感谢您的帮助


2012-10-30 11:20:20203[4560]错误Topshelf.Model.ServiceCoordinator.OnServiceFault(:0)-quartz.server上的错误:Topshelf.Exceptions.ServiceControlException
服务启动异常:quartz.server(IQuartzServer)
在Topshelf.Builders.LocalServiceBuilder`1.StartService(T服务)
在Topshelf.Model.LocalServiceController`1.CallAction[TBefore,TComplete](字符串文本,Action`1 callback,Func`1 before,Func`1 complete)
帮助链接:
Quartz.schedulerconfig异常
作业恢复期间发生故障。
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\jobstore\JobStoreSupport.cs中的Quartz.Impl.AdoJobStore.jobstore.SchedulerStarted()处:第591行
在c:\Work\OpenSource\quartznet\src\Quartz\Core\QuartzScheduler.cs中的Quartz.Core.QuartzScheduler.Start()处:第440行
在Quartz.Server.QuartzServer.Start()处
在Topshelf.Builders.LocalServiceBuilder`1.StartService(T服务)
帮助链接:
Quartz.JobPersistenceException
无法为“default.remotelyAddedJob”作业存储触发器“default.remotelyAddedTrigger”:无法加载文件或程序集“Company.Product.ServiceLayer”或其依赖项之一。系统找不到指定的文件。
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\jobstore\jobstore.cs第1064行的Quartz.Impl.AdoJobStore.jobstore.jobstore-support.StoreTrigger(ConnectionAndTransactionHolder-conn、IOperableTrigger-newTrigger、IJobDetail-job、Boolean-replaceExisting、String-state、Boolean-forceState、Boolean Rec
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\jobstore.cs中的Quartz.Impl.AdoJobStore.jobstore.support.DoUpdateOfMisfiredTrigger(ConnectionAndTransactionHolder conn,IOperableTrigger,Boolean forceState,String newStateIfNotComplete,Boolean recovering)中
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\jobstore\jobstore-support.recovermisiredjobs(ConnectionAndTransactionHolder-conn,布尔恢复)中的Quartz.Impl.AdoJobStore.jobstore.recovermisiredjobs(ConnectionAndTransactionHolder-conn,布尔恢复):第814行
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\jobstore.support.cs中的Quartz.Impl.AdoJobStore.jobstore.RecoverJobs(ConnectionAndTransactionHolder-conn)中:第760行
在Quartz.Impl.AdoJobStore.JobStoreSupport.c_uu中,在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs中显示Class74.b_u73(ConnectionAndTransactionHolder conn):第3411行
在c:\Work\OpenSource\quartznet\src\Quartz\Quartz\Impl\AdoJobStore\jobstore-support.ExecuteInNonManagedTXLock(字符串lockName,Func`2 txCallback)中的Quartz.Impl.AdoJobStore.jobstore-support.ExecuteInNonManagedTXLock中:第3481行
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\jobstore\JobStoreSupport.cs中的Quartz.Impl.AdoJobStore.JobStoreSupport.SchedulerStarted()处:第581行
帮助链接:
System.IO.FileNotFoundException
无法加载文件或程序集“Company.Product.ServiceLayer”或其依赖项之一。系统找不到指定的文件。
位于System.RuntimeTypeHandle.GetTypeByName(字符串名称、布尔throwOnError、布尔ignoreCase、布尔reflectionOnly、StackScrawMarkHandle stackMark、IntPtr pPrivHostBinder、布尔loadTypeFromPartialName、ObjectHandleOnStack类型)
在System.RuntimeTypeHandle.GetTypeByName(字符串名称、布尔throwOnError、布尔ignoreCase、布尔reflectionOnly、StackScrawlMark和stackMark、IntPtr pPrivHostBinder、布尔loadTypeFromPartialName)
在System.Type.GetType(字符串typeName,布尔throwOnError)
在c:\Work\OpenSource\quartznet\src\Quartz\simple\SimpleTypeLoadHelper.cs中的Quartz.SimpleTypeLoadHelper.LoadType(字符串名称)处:第51行
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\StdAdoDelegate.cs中的Quartz.Impl.AdoJobStore.stdadelegate.SelectJobDetail(ConnectionAndTransactionHolder conn,JobKey,ITypeLoadHelper loadHelper)中选择JobDetail(ConnectionAndTransactionHolder conn,JobKey,ITypeLoadHelper loadHelper-LoadHelp
在c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\jobstore\jobstore.cs中的Quartz.Impl.AdoJobStore.jobstore.jobstore支持.StoreTrigger(ConnectionAndTransactionHolder conn,IOperableTrigger newTrigger,IJobDetail作业,布尔替换现有,字符串状态,布尔强制状态,布尔恢复)中

stdadoelegate上有一个扩展点可用于此方法,可以覆盖GetStorableJobTypeName以包含版本和强名称信息。目前没有用于更改行为的配置开关,因此需要扩展SqlServerDelegate(如果使用
2012-10-30 11:20:20,203 [4560] ERROR Topshelf.Model.ServiceCoordinator.OnServiceFault(:0) - Fault on quartz.server: Topshelf.Exceptions.ServiceControlException
Service Start Exception: quartz.server (IQuartzServer)
   at Topshelf.Builders.LocalServiceBuilder`1.StartService(T service)
   at Topshelf.Model.LocalServiceController`1.CallAction[TBefore,TComplete](String text, Action`1 callback, Func`1 before, Func`1 complete)
HelpLink:

Quartz.SchedulerConfigException
Failure occured during job recovery.
   at Quartz.Impl.AdoJobStore.JobStoreSupport.SchedulerStarted() in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 591
   at Quartz.Core.QuartzScheduler.Start() in c:\Work\OpenSource\quartznet\src\Quartz\Core\QuartzScheduler.cs:line 440
   at Quartz.Server.QuartzServer.Start()
   at Topshelf.Builders.LocalServiceBuilder`1.StartService(T service)
HelpLink:

Quartz.JobPersistenceException
Couldn't store trigger 'default.remotelyAddedTrigger' for 'default.remotelyAddedJob' job: Could not load file or assembly 'Company.Product.ServiceLayer' or one of its dependencies. The system cannot find the file specified.
   at Quartz.Impl.AdoJobStore.JobStoreSupport.StoreTrigger(ConnectionAndTransactionHolder conn, IOperableTrigger newTrigger, IJobDetail job, Boolean replaceExisting, String state, Boolean forceState, Boolean recovering) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 1064
   at Quartz.Impl.AdoJobStore.JobStoreSupport.DoUpdateOfMisfiredTrigger(ConnectionAndTransactionHolder conn, IOperableTrigger trig, Boolean forceState, String newStateIfNotComplete, Boolean recovering) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 876
   at Quartz.Impl.AdoJobStore.JobStoreSupport.RecoverMisfiredJobs(ConnectionAndTransactionHolder conn, Boolean recovering) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 814
   at Quartz.Impl.AdoJobStore.JobStoreSupport.RecoverJobs(ConnectionAndTransactionHolder conn) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 760
   at Quartz.Impl.AdoJobStore.JobStoreSupport.<>c__DisplayClass74.<ExecuteInNonManagedTXLock>b__73(ConnectionAndTransactionHolder conn) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 3411
   at Quartz.Impl.AdoJobStore.JobStoreSupport.ExecuteInNonManagedTXLock(String lockName, Func`2 txCallback) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 3481
   at Quartz.Impl.AdoJobStore.JobStoreSupport.SchedulerStarted() in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 581
HelpLink:

System.IO.FileNotFoundException
Could not load file or assembly 'Company.Product.ServiceLayer' or one of its dependencies. The system cannot find the file specified.
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
   at System.Type.GetType(String typeName, Boolean throwOnError)
   at Quartz.Simpl.SimpleTypeLoadHelper.LoadType(String name) in c:\Work\OpenSource\quartznet\src\Quartz\Simpl\SimpleTypeLoadHelper.cs:line 51
   at Quartz.Impl.AdoJobStore.StdAdoDelegate.SelectJobDetail(ConnectionAndTransactionHolder conn, JobKey jobKey, ITypeLoadHelper loadHelper) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\StdAdoDelegate.cs:line 788
   at Quartz.Impl.AdoJobStore.JobStoreSupport.StoreTrigger(ConnectionAndTransactionHolder conn, IOperableTrigger newTrigger, IJobDetail job, Boolean replaceExisting, String state, Boolean forceState, Boolean recovering) in c:\Work\OpenSource\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 1041
protected override string GetStorableJobTypeName(Type jobType)
{
    return jobType.AssemblyQualifiedName;
}
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="Company.Product.ServiceLayer" fullName="Company.Product.ServiceLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=125c3f237e3350e4"/>
    </assemblyBinding>
  </runtime>