Tengo problemas para que funcione la implementación de Quartz.NET cliente/servidor.Quartz.NET, "Error al comunicarse con el programador remoto".
Tengo un servidor SQL en ServerA, un servidor que ejecuta Quartz como servicio (ServerB) y un servidor que aloja una aplicación ASP.NET (ServerC).
He seguido todos los tutoriales y profundicé en el código bastante, pero no puedo ver lo que estoy haciendo mal. El servidor definitivamente está escuchando y puedo ver que el puerto está abierto desde ServerC. No hay firewalls involucrados.
ServidorB, que ejecuta el servicio incluido en el paquete de descarga (Quartz.Server.Service) tiene los siguientes ajustes del archivo de configuración:
<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>
La aplicación ASP.NET tiene la siguiente configuración:
<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>
He intentado varias cosas. Ocasionalmente me sale un error de que el planificador ya existe en lugar del que está en el título de la pregunta.
He leído en otro lugar que, debido a problemas de threads que debería crear el planificador en un conjunto unitario, lo que he hecho:
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é me he perdido? TIA
Si abro una caja de telnet en el servidor web y conectarse al servidor de cuarzo entonces el servicio es sin duda responde. Si escribo algunos caracteres, obtengo un error de Quartz.
¿Le sirve de ayuda? Es decir. no es un problema de conectividad?
Telnet http://www.freeimagehosting.net/uploads/3bd8cd3f53.png
¿Faltaba el archivo dll en el servicio de cuarzo o en la aplicación desde la que se conectaba de forma remota? ¿Te importaría compartir el nombre dll? Estoy teniendo el mismo problema mientras me conecto de forma remota a un servidor de cuarzo. – user2748614
Estaba en el servidor, pero no recuerdo qué dll era: habría sido Quartz.Core.dll, Quartz.Service.dll o el ensamblado en el que había implementado mis interfaces IJob. – enashnash