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