【问题标题】:Quartz.NET, "Error communicating with remote scheduler."Quartz.NET,“与远程调度程序通信时出错。”
【发布时间】:2019-08-01 23:03:54
【问题描述】:

我无法让 Quartz.NET 的客户端/服务器实现正常工作。

我在 ServerA 上有一个 SQL Server,一个运行 Quartz 作为服务的服务器 (ServerB) 和一个托管 ASP.NET 应用程序的服务器 (ServerC)。

我已遵循所有教程并深入研究了代码,但我看不出我做错了什么。服务器肯定在监听,我可以看到从 ServerC 打开的端口。不涉及防火墙。

运行下载包(Quartz.Server.Service)中包含的服务的ServerB具有以下配置文件设置:

<quartz>
    <add key="quartz.server.serviceName" value="quartz" />
    <add key="quartz.server.serviceDisplayName" value="Job Scheduler" />
    <add key="quartz.scheduler.instanceName" value="RemoteServer" />
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPriority" value="Normal" />
    <add key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz" />
    <add key="quartz.scheduler.exporter.port" value="5656" />
    <add key="quartz.scheduler.exporter.bindName" value="QuartzScheduler" />
    <add key="quartz.scheduler.exporter.channelType" value="tcp" />
    <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
    <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
    <add key="quartz.jobStore.tablePrefix" value="qrtz_" />
    <add key="quartz.jobStore.dataSource" value="db" />
    <add key="quartz.dataSource.db.provider" value="SqlServer-20" />
    <add key="quartz.dataSource.db.connectionString" value="Data Source=ServerA;Initial Catalog=dev;User ID=dev;Password=dev" />
    <add key="quartz.jobStore.useProperties" value="true" />
    <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
</quartz>

ASP.NET 应用具有以下配置:

<quartz>
    <add key="quartz.scheduler.instanceName" value="RemoteClient" />
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="5" />
    <add key="quartz.threadPool.threadPriority" value="Normal" />
    <add key="quartz.scheduler.proxy" value="true" />
    <add key="quartz.scheduler.proxy.address" value="tcp://ServerB:5656/QuartzScheduler" />
</quartz>

我尝试了很多东西。有时我会收到一个错误,即调度程序已经存在,而不是问题标题中的那个。

我在其他地方读到,由于线程问题,我应该在单例中创建调度程序,我已经这样做了:

    private static readonly ISchedulerFactory _schedulerFactory;
    private static readonly IScheduler _scheduler;

    static JobScheduleService() {
        _schedulerFactory = new StdSchedulerFactory();
        _scheduler = _schedulerFactory.GetScheduler();
    }

    public static IScheduler GetScheduler() {
        return _scheduler;
    }

我错过了什么? TIA


如果我在网络服务器上打开一个远程登录框并连接到石英服务器,那么服务肯定会响应。如果我输入几个字符,Quartz 就会出错。

这有帮助吗? IE。不是连接问题?

【问题讨论】:

  • 石英服务或远程连接的应用程序上是否缺少 dll 文件?您介意分享 dll 名称吗?我在远程连接到石英服务器时遇到了同样的问题。
  • 它在服务器上,但我不记得它是哪个 dll - 它应该是 Quartz.Core.dll、Quartz.Service.dll 或我在其中实现了我的程序集IJob 接口。

标签: .net quartz.net


【解决方案1】:

尽量不要设置任何quartz.threadpool.xxxxxx 属性。

【讨论】:

  • 我在石英服务器上将它们注释掉并重新启动服务,然后在 Web 服务器上。我仍然遇到同样的错误。
  • 我应该更具体...仅在客户端将它们注释掉。这可能无济于事,但这是我看到的我们正在做的事情和你正在做的事情的唯一区别。
  • 没什么。我假设您已经尝试使用同一用户使用 asp.net 应用程序从服务器连接到端口,只是为了排除连接性和权限。
  • 服务在本地系统账户下运行,你有不同的配置吗?
  • 是的,我们使用域帐户运行服务,并且我们对 Web 应用程序执行相同的操作。
【解决方案2】:

事实证明,错误消息只是有点误导。错误根本不在与服务器的通信中。问题是缺少一个 DLL 文件,该文件未作为部署的一部分进行复制。根本错误是由于调度程序无法找到 DLL。

【讨论】:

  • 补充一点,我发现在尝试添加引用了quartz.net服务器未找到的类的作业时也会发生此错误。
  • 很想知道它是什么 dll。我现在遇到了这个问题。
  • 这是我创建 IJob 实现的 DLL,与 Quartz DLL 本身没有任何关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多