2010-07-09 3 views
6

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

+0

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

+0

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

Antwort

1

Es stellt sich heraus, dass die Fehlermeldung nur ein wenig irreführend ist. Der Fehler war überhaupt nicht in der Kommunikation mit dem Server. Das Problem war eine fehlende DLL-Datei, die nicht als Teil der Bereitstellung kopiert wurde. Der zugrunde liegende Fehler war aufgrund der Scheduler Unfähigkeit, die DLL zu finden.

+0

Um das hinzuzufügen, habe ich festgestellt, dass dieser Fehler auch beim Versuch auftritt, einen Job hinzuzufügen, der auf eine Klasse verweist, die vom quartz.net-Server nicht gefunden wird. – EBarr

+0

Ich hätte gerne gewusst, was es war. Ich habe dieses Problem jetzt. – gooddadmike

+0

Es war die DLL, in der ich die IJob-Implementierungen erstellt hatte, nichts, was mit den Quartz-DLLs selbst zu tun hatte. – enashnash

2

Versuchen Sie nicht, eine der quartz.threadpool.xxxxxx Eigenschaften festlegen.

+0

Ich habe sie auf dem Quarzserver auskommentiert und den Dienst neu gestartet, dann auf dem Webserver. Ich bekomme immer noch den gleichen Fehler. – enashnash

+0

Ich hätte genauer sein sollen ... kommentieren sie nur auf der Client-Seite. Es hilft vielleicht nicht, aber das ist der einzige Unterschied, den ich in dem, was wir tun und was du tust, erkennst. – jvilalta

+0

Gleicher Fehler, fürchte ich. Irgendwelche anderen Vorschläge? – enashnash

Verwandte Themen