Quartz.NET,“与远程调度程序通信时出错”。

时间:2010-07-09 20:25:21

标签: .net quartz.net

我在使用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


如果我在Web服务器上打开一个telnet盒并连接到quartz服务器,那么该服务肯定会响应。如果我输入几个字符,我会收到Quartz的错误。

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

Telnet http://www.freeimagehosting.net/uploads/3bd8cd3f53.png

2 个答案:

答案 0 :(得分:2)

尝试不设置任何quartz.threadpool.xxxxxx属性。

答案 1 :(得分:1)

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