Ich habe Probleme, eine Client/Server-Implementierung von Quartz.NET zu erhalten.Quartz.NET, "Fehler beim Kommunizieren mit dem Remote-Scheduler."
Ich habe einen SQL Server auf ServerA, einen Server mit Quartz als einen Dienst (ServerB) und einen Server, der eine ASP.NET-Anwendung (ServerC) hostet.
Ich habe alle Tutorials gefolgt und in den Code eine angemessene Menge eingetaucht, aber ich kann nicht sehen, was ich falsch mache. Der Server hört definitiv zu und ich kann sehen, dass der Port von ServerC geöffnet ist. Keine Firewalls beteiligt.
ServerB, die den Dienst enthalten im Download-Paket (Quartz.Server.Service) hat die folgenden Konfigurationsdatei Einstellungen ausgeführt wird:
<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>
Die ASP.NET-Anwendung hat die folgende Konfiguration:
<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>
Ich habe zahlreiche Dinge ausprobiert. Gelegentlich tritt ein Fehler auf, dass der Scheduler bereits vorhanden ist und nicht der im Fragetitel.
Ich habe an anderer Stelle, dass aufgrund Threadingprobleme las ich den Scheduler in einem Singleton schaffen sollte, was ich getan habe:
private static readonly ISchedulerFactory _schedulerFactory;
private static readonly IScheduler _scheduler;
static JobScheduleService() {
_schedulerFactory = new StdSchedulerFactory();
_scheduler = _schedulerFactory.GetScheduler();
}
public static IScheduler GetScheduler() {
return _scheduler;
}
Was habe ich verpasst? TIA
Wenn ich eine Telnet-Box auf dem Web-Server und eine Verbindung mit dem Quarz-Server öffnen, dann wird der Service auf jeden Fall reagieren. Wenn ich ein paar Zeichen eintippe, erhalte ich einen Fehler von Quartz.
Hilft das? I.e. es ist kein Konnektivitätsproblem?
Telnet http://www.freeimagehosting.net/uploads/3bd8cd3f53.png
Fehlt die DLL-Datei im Quartz-Dienst oder in der App, von der aus Sie remote verbunden sind? Würde es Ihnen etwas ausmachen, den DLL-Namen zu teilen? Ich habe das gleiche Problem beim Remote-Anschluss an einen Quarz-Server. – user2748614
Es war auf dem Server, aber ich erinnere mich nicht, welche DLL es war - es wäre Quartz.Core.dll, Quartz.Service.dll, oder die Assembly, in der ich meine IJob-Schnittstellen implementiert hatte. – enashnash