2010-07-09 4 views
6

J'ai des difficultés à obtenir une implémentation client/serveur de Quartz.NET.Quartz.NET, "Erreur de communication avec le planificateur distant".

J'ai un SQL Server sur ServerA, un serveur exécutant Quartz en tant que service (ServerB) et un serveur qui héberge une application ASP.NET (ServerC).

J'ai suivi tous les tutoriels et j'ai beaucoup travaillé sur le code, mais je ne vois pas ce que je fais de mal. Le serveur écoute définitivement et je peux voir que le port est ouvert depuis ServerC. Pas de pare-feu impliqués.

ServerB, qui exécute le service inclus dans le package de téléchargement (Quartz.Server.Service) a les paramètres du fichier de configuration suivants:

<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'application ASP.NET a la configuration suivante:

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

J'ai essayé de nombreuses choses. De temps en temps j'obtiens une erreur que le planificateur existe déjà au lieu de celui dans le titre de question.

J'ai lu ailleurs qu'en raison de problèmes de filetage je créer le planificateur dans un singleton, que je l'ai fait:

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

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

    public static IScheduler GetScheduler() { 
     return _scheduler; 
    } 

Qu'est-ce que je manqué? Si j'ouvre une boîte Telnet sur le serveur Web et que je me connecte au serveur de quartz, le service répond définitivement. Si je tape quelques caractères, j'obtiens une erreur de Quartz.

Est-ce que cela aide? C'est à dire. ce n'est pas un problème de connectivité?

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

+0

Le fichier dll était-il manquant sur le service de quartz ou sur l'application à partir de laquelle vous étiez connecté à distance? Cela vous dérangerait-il de partager le nom de la DLL? J'ai le même problème lors de la connexion à distance à un serveur de quartz. – user2748614

+0

Il était sur le serveur, mais je ne me souviens pas quel dll il était - il aurait été Quartz.Core.dll, Quartz.Service.dll, ou l'ensemble dans lequel j'avais mis en œuvre mes interfaces IJob. – enashnash

Répondre

1

Il s'avère que le message d'erreur est juste un peu trompeur. L'erreur n'était pas du tout dans la communication avec le serveur. Le problème était un fichier DLL manquant qui n'était pas copié dans le cadre du déploiement. L'erreur sous-jacente était due à l'incapacité des planificateurs à trouver la DLL.

+0

Pour ajouter à cela, j'ai trouvé cette erreur se produit également lorsque vous essayez d'ajouter un travail qui référence une classe non trouvée par le serveur quartz.net. – EBarr

+0

Aurait aimé savoir ce que c'était. J'ai ce problème maintenant. – gooddadmike

+0

C'était la DLL où j'avais créé les implémentations d'IJob, pas n'importe quoi avec les DLL Quartz elles-mêmes. – enashnash

2

Essayez de ne pas mettre l'une des propriétés de quartz.threadpool.xxxxxx.

+0

Je les ai commentés sur le serveur à quartz et redémarré le service, puis sur le serveur web. Je reçois toujours la même erreur. – enashnash

+0

J'aurais dû être plus précis ... ne les commentez que du côté client. Cela pourrait ne pas aider, mais c'est la seule différence que je vois dans ce que nous faisons et ce que vous faites. – jvilalta

+0

Même erreur j'ai peur. D'autres suggestions? – enashnash

Questions connexes