【问题标题】:Quartz.Net scheduler service does not start automatically on startupQuartz.Net 调度程序服务在启动时不会自动启动
【发布时间】:2015-02-23 11:45:46
【问题描述】:

我已经开发了一个 Quartz.Net windows 服务来运行预定的作业,并且我已经设置了一个 SQLite 作业存储来让它工作。以下是我AdoJobStore的设置:

# SQLite settings
quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
quartz.jobStore.misfireThreshold = 60000
quartz.jobStore.lockHandler.type = Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz
quartz.jobStore.useProperties = true
quartz.jobStore.dataSource = default
quartz.jobStore.tablePrefix = qrtz_
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz
quartz.dataSource.default.provider = SQLite-10
quartz.dataSource.default.connectionString = Data Source=.\jobs.db;Version=3

在让您头疼之前,我应该说这是一个可行的解决方案!这意味着工作商店工作得很好!每个作业都包含运行一个.exe 文件,该文件将使用存储在文本文件中的连接字符串从SQL Server 数据库中获取其参数。

所以如果服务自动启动,一切正常。

安装 Windows 服务后,我们在服务的 Log On 选项卡中为其提供一个可以访问目标数据库的用户名。我们将服务设置为自动启动(并且也尝试了 Automatic Delayed 模式)。在服务的 Recovery 选项卡中,我们还命令它重新启动,以防它崩溃。

但是,该服务似乎并没有在某些机器上自行启动,这让我想了很长时间。在出现故障的机器上,这是我的服务无法启动时记录的内容:

2015-02-13 15:09:15,674 [1] ERROR Quartz.Server.QuartzServer [(null)] - Server initialization failed:Unable to bind scheduler to remoting.
Quartz.SchedulerException: Unable to bind scheduler to remoting. ---> System.Net.Sockets.SocketException: No such host is known
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
   at System.Runtime.Remoting.Channels.CoreChannel.GetMachineIp()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupMachineName()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback)
   at System.Runtime.Remoting.Channels.Tcp.TcpChannel..ctor(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
   at Quartz.Simpl.RemotingSchedulerExporter.RegisterRemotingChannelIfNeeded()
   at Quartz.Simpl.RemotingSchedulerExporter.Bind(IRemotableQuartzScheduler scheduler)
   at Quartz.Core.QuartzScheduler.Bind()
   at Quartz.Core.QuartzScheduler.Initialize()
   --- End of inner exception stack trace ---
   at Quartz.Core.QuartzScheduler.Initialize()
   at Quartz.Impl.StdSchedulerFactory.Instantiate()
   at Quartz.Impl.StdSchedulerFactory.GetScheduler()
   at Quartz.Server.QuartzServer.Initialize() [See nested exception: System.Net.Sockets.SocketException (0x80004005): No such host is known
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
   at System.Runtime.Remoting.Channels.CoreChannel.GetMachineIp()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupMachineName()
   at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback)
   at System.Runtime.Remoting.Channels.Tcp.TcpChannel..ctor(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
   at Quartz.Simpl.RemotingSchedulerExporter.RegisterRemotingChannelIfNeeded()
   at Quartz.Simpl.RemotingSchedulerExporter.Bind(IRemotableQuartzScheduler scheduler)
   at Quartz.Core.QuartzScheduler.Bind()
   at Quartz.Core.QuartzScheduler.Initialize()]

该服务安装在主机127.0.0.1 端口555 上,似乎不需要依赖,因为它可以在其他一些机器下工作。

我感觉服务正在尝试在访问数据库之前或在建立TCP 主机之前自行启动。但如果是这样,为什么它可以在其他设备上运行?

我之前也问过同样的问题,但没有找到有效的答案。非常感谢 Quartz.Net 开发团队或 Windows 服务 专家的任何帮助。

【问题讨论】:

    标签: c# sql-server sockets windows-services quartz.net


    【解决方案1】:

    免责声明。我不是 Quartz.net 开发团队的一员,也不是 Windows 服务专家

    该服务安装在主机 127.0.0.1 的 555 端口上,似乎不需要依赖,因为它可以在其他一些机器下工作。

    你的推理是错误的。可能是所需的服务只是碰巧总是在其他机器上启动,但如果不设置依赖关系,则不能保证。

    因此,由于您遇到了 DNS 错误,我建议您首先将服务设置为依赖于 DnscacheTcpip

    【讨论】:

    • 有道理。我应该试试这个。会告诉你它是否有效。
    • 我没有您上面提到的名称的服务,但我可以在我安装的服务中看到TCP/IP NETBIOS HelperDNS Client
    • Dnscache 是服务名称,DNS Client 是同一服务的显示名称。 lmhostsTCP/IP NETBIOS Helper 的服务名称,但我不确定是否需要 NetBios。 Tcpip 实际上是一个设备而不是一个服务,但它仍然可以作为依赖包含进来。
    • 该死!我真的对此寄予厚望。但它们都不起作用。我有两个同事都在完全相同类型的笔记本电脑上安装了 Win7。一个工作,另一个不工作。发现问题变得如此困难。我怎么知道我的服务真正依赖什么?为什么“自动延迟”启动类型也不起作用?任何建议仍将不胜感激。
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多