2010-07-09 7 views
6

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

+0

¿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

+0

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

Respuesta

1

Resulta que el mensaje de error es un poco engañoso. El error no estaba en la comunicación con el servidor. El problema era un archivo DLL faltante que no se estaba copiando como parte de la implementación. El error subyacente se debió a que los planificadores no pudieron encontrar el archivo DLL.

+0

Para agregar a esto, he encontrado que este error también ocurre al intentar agregar un trabajo que hace referencia a una clase no encontrada por el servidor de quartz.net. – EBarr

+0

Me hubiera encantado saber lo que era. Estoy teniendo este problema ahora. – gooddadmike

+0

Era la DLL donde había creado las implementaciones de IJob, no tiene nada que ver con las DLL de Quartz. – enashnash

2

tratar de no establecer ninguna de las propiedades quartz.threadpool.xxxxxx.

+0

Los comenté en el servidor de cuarzo y reinicié el servicio, luego en el servidor web. Todavía recibo el mismo error. – enashnash

+0

Debería haber sido más específico ... comentarlo solo en el lado del cliente. Puede que no ayude, pero esta es la única diferencia que veo en lo que estamos haciendo y en lo que estás haciendo. – jvilalta

+0

Mismo error me temo. ¿Cualquier otra sugerencia? – enashnash

Cuestiones relacionadas