1

我已经在 Windows 服务中实现了quartz.net 来运行任务。在本地工作站上一切正常。但是一旦它被部署到远程win服务器主机上,它就会在初始化后挂起。

ISchedulerFactory schedFact = new StdSchedulerFactory();

// get a scheduler
var _scheduler = schedFact.GetScheduler();

// Configuration of triggers and jobs
var trigger = (ICronTrigger)TriggerBuilder.Create()
                                          .WithIdentity("trigger1", "group1")
                                          .WithCronSchedule(job.Value)
                                          .Build();

var jobDetail = JobBuilder.Create(Type.GetType(job.Key)).StoreDurably(true)
                                .WithIdentity("job1", "group1").Build();

var ft = _scheduler.ScheduleJob(jobDetail, trigger);

一切似乎都是标准的。我有指向调度程序的私有静态指针,在作业初始化并添加到调度程序后,日志记录过程立即停止。之后没有其他事情发生。我会很感激任何建议。

谢谢。

PS:

根据quartz.net,在事件查看器mb中发现了一些奇怪的事件:

Restart Manager - Starting session 2 - ‎2012‎-‎07‎-‎09T15:14:15.729569700Z.
Restart Manager - Ending session 2 started ‎2012‎-‎07‎-‎09T15:14:15.729569700Z.
4

2 回答 2

2

根据您的问题和您在评论中提供的其他信息,我猜您的服务的 onStart 方法出了点问题。

以下是您可以做的一些事情来帮助找出和解决问题:

  1. 将代码放在您的 onStart 方法中的 try/catch 块中,然后尝试安装和启动服务。然后检查windows日志,看看它是否安装正确、启动正确等。
  2. 重新启动管理器正在运行的事实使我相信您的服务可能依赖于已经在使用的进程。确保在安装之前关闭服务的任何依赖项。
  3. 将数据密集型或长时间运行的操作放入 onStart 方法也可能导致此问题。确保将此类代码排除在 onStart 之外。
于 2012-07-11T12:48:49.233 回答
0

我有一个类似的问题,它是由程序集名称中的点/句点引起的,例如Project.Update.Service. 当我将其更改为ProjectUpdateService它工作正常。

奇怪的是,它总是在开发机器上工作。只是从不在远程机器上。

更新:可能是服务的长度导致了这个问题。通过删除点,我缩短了服务名称。看起来最大长度是 25 个字符。

于 2017-02-12T17:43:11.710 回答