2010-07-09 18 views
6

Sto riscontrando problemi nel far funzionare un'implementazione client/server di Quartz.NET.Quartz.NET, "Errore nella comunicazione con lo scheduler remoto."

Ho un server SQL su ServerA, un server che esegue Quartz come servizio (ServerB) e un server che ospita un'applicazione ASP.NET (ServerC).

Ho seguito tutti i tutorial e ho approfondito il codice in buona quantità ma non riesco a vedere cosa sto facendo male. Il server è in ascolto e posso vedere che la porta è aperta da ServerC. Nessun firewall incluso.

ServerB, che esegue il servizio incluso nel pacchetto di download (Quartz.Server.Service) ha le seguenti impostazioni del file di configurazione:

<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> 

L'applicazione ASP.NET ha la seguente configurazione:

<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> 

Ho provato numerose cose. Occasionalmente ricevo un errore che lo schedulatore esiste già al posto di quello nel titolo della domanda.

Ho letto altrove che a causa di problemi di threading dovrei creare lo scheduler in un Singleton, che ho fatto:

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

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

    public static IScheduler GetScheduler() { 
     return _scheduler; 
    } 

Che cosa ho mancato? TIA


Se apro una scatola telnet sul server Web e connettersi al server di quarzo poi il servizio è decisamente risponde. Se digito alcuni caratteri ottengo un errore da Quartz.

fa questo aiuto? Cioè non è un problema di connettività?

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

+0

Il file dll sul servizio Quartz o sull'app da cui si connetteva da remoto era mancante? Ti dispiacerebbe condividere il nome della DLL? Sto riscontrando lo stesso problema durante la connessione remota a un server al quarzo. – user2748614

+0

Era sul server, ma non ricordo quale dll fosse - sarebbe stato Quartz.Core.dll, Quartz.Service.dll, o l'assembly in cui avevo implementato le mie interfacce IJob. – enashnash

risposta

1

Si scopre che il messaggio di errore è solo un po 'fuorviante. L'errore non era affatto nella comunicazione con il server. Il problema era un file DLL mancante che non veniva copiato come parte della distribuzione. L'errore sottostante era dovuto all'incapacità dei programmatori di trovare la DLL.

+0

Per aggiungere a questo, ho trovato che questo errore si verifica anche quando si tenta di aggiungere un lavoro che fa riferimento a una classe non trovata dal server quartz.net. – EBarr

+0

Mi sarebbe piaciuto sapere che cosa era. Sto avendo questo problema ora. – gooddadmike

+0

Era la DLL in cui avevo creato le implementazioni IJob, non qualcosa a che fare con le DLL Quartz stesse. – enashnash

2

cercare di non impostare una qualsiasi delle proprietà quartz.threadpool.xxxxxx.

+0

Li ho commentati sul server quarzo e riavviato il servizio, quindi sul server web. Ho ancora lo stesso errore. – enashnash

+0

Avrei dovuto essere più specifico ... commentarli solo dal lato client. Potrebbe non essere d'aiuto, ma questa è l'unica differenza che vedo in quello che stiamo facendo e in quello che stai facendo. – jvilalta

+0

Stesso errore ho paura. Qualche altro suggerimento? – enashnash