Tôi gặp sự cố khi triển khai máy khách/máy chủ của Quartz.NET.Quartz.NET, "Lỗi khi kết nối với bộ lập lịch từ xa".
Tôi có máy chủ SQL trên ServerA, máy chủ chạy Quartz là dịch vụ (ServerB) và máy chủ lưu trữ ứng dụng ASP.NET (ServerC).
Tôi đã làm theo tất cả các hướng dẫn và được đưa vào mã một số tiền hợp lý nhưng tôi không thể nhìn thấy những gì tôi đang làm sai. Máy chủ chắc chắn đang lắng nghe và tôi có thể thấy cổng đang mở từ ServerC. Không có tường lửa liên quan.
ServerB, mà đang chạy dịch vụ bao gồm trong gói tải về (Quartz.Server.Service) có các thiết lập tập tin cấu hình sau:
<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>
Ứng dụng ASP.NET có cấu hình sau:
<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>
Tôi đã thử nhiều thứ. Thỉnh thoảng tôi gặp lỗi khi người lên lịch đã tồn tại thay vì người lập lịch trong tiêu đề câu hỏi.
Tôi đã đọc ở đâu đó rằng do các vấn đề luồng tôi nên tạo scheduler trong một singleton, mà tôi đã thực hiện:
private static readonly ISchedulerFactory _schedulerFactory;
private static readonly IScheduler _scheduler;
static JobScheduleService() {
_schedulerFactory = new StdSchedulerFactory();
_scheduler = _schedulerFactory.GetScheduler();
}
public static IScheduler GetScheduler() {
return _scheduler;
}
Tôi đã bỏ lỡ gì? TIA
Nếu tôi mở hộp telnet trên máy chủ web và kết nối với máy chủ thạch anh thì dịch vụ chắc chắn sẽ phản hồi. Nếu tôi gõ một vài ký tự tôi nhận được một lỗi từ Quartz.
Điều này có hữu ích không? I E. nó không phải là một vấn đề kết nối?
Telnet http://www.freeimagehosting.net/uploads/3bd8cd3f53.png
Tệp dll có bị thiếu trên dịch vụ thạch anh hoặc trên ứng dụng từ nơi bạn kết nối từ xa không? Bạn có nhớ chia sẻ tên dll? Tôi gặp vấn đề tương tự khi kết nối từ xa với máy chủ thạch anh. – user2748614
Nó đã được trên máy chủ, nhưng tôi không nhớ đó dll nó được - nó sẽ có được Quartz.Core.dll, Quartz.Service.dll, hoặc lắp ráp trong đó tôi đã thực hiện các giao diện IJob của tôi. – enashnash