2016-11-18 1 views
2

Я хочу проверить функции базы данных SQL Quartz.NET 3.0 для .NET Core. К сожалению, я не могу настроить StdSchedulerFactory правильно, я всегда получаю следующее исключение при вызове StdSchedulerFactory.GetScheduler:Информация о метаданных для провайдера 'SqlServer-20'

System.ArgumentOutOfRangeException: 
There is no metadata information for provider 'SqlServer-20' 
Parameter name: providerName 
    at Quartz.Impl.AdoJobStore.Common.DbProvider.GetDbMetadata(String providerName) 
    at Quartz.Impl.AdoJobStore.Common.DbProvider..ctor(String dbProviderName, String connectionString) 
    at Quartz.Impl.StdSchedulerFactory.<Instantiate>d__66.MoveNext() 

Я настроил завод со следующими значениями:

var configuration = new NameValueCollection 
{ 
    { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" }, 
    { "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" }, 
    { "quartz.jobStore.tablePrefix", "QRTZ_" }, 
    { "quartz.jobStore.dataSource", "default" }, 
    { "quartz.dataSource.default.connectionString", "Server=(localdb)\\mssqllocaldb;Database=QuartzTest;Trusted_Connection=True;MultipleActiveResultSets=true" }, 
    { "quartz.dataSource.default.provider", "SqlServer-20" }, 
    { "quartz.jobStore.useProperties", "true" }, 
    { "quartz.serializer.type", "json" } 
}; 

var schedulerFactory = new StdSchedulerFactory(configuration); 

Как вы можете см. в настоящее время я нацелен на LocalDB (v12.0.2000). Я также проверил его на SQL Server Express - тот же результат.

Как я могу избежать этого исключения?

  • Я пропустил какие-либо свойства, которые мне нужно настроить?
  • Должен ли я предоставить некоторые данные для базы данных? Я только выполнил сценарий tables_sqlServer.sql.
  • Драйвер базы данных SqlServer-20 должен быть установлен как часть .NET 3.5 или требуется отдельная установка?
  • В настоящее время Quartz.NET не поддерживает эту функцию для .NET Core? Я использую версию 3.0.0-alpha2.
  • Должен ли я настраивать таргетинг на другие пакеты NuGet? Я ссылки Quartz и Quartz.Serialization.Json

ответ

2

Мой друг только что нашел ответ: согласно this example on Github, вы должны использовать SqlServer-41 вместо SqlServer-20 в проектах .NET Core.

3

В настоящее время в соответствии с изменением журнала для бета1 версии для поставщиков нет. Так конфигурация правильный поставщик для SqlServer является:

["quartz.dataSource.sqlserver.provider"] = "SqlServer" 

Источник: https://github.com/quartznet/quartznet/blob/e3ff6936ea1a76480b7671e2b5c468c1b67f4897/changelog.md#release-30-beta-1-oct-8-2017

+0

Это работает! Я использую .net Core 2 с Quartz 3 –

0
// Grab the Scheduler instance from the Factory 
      NameValueCollection properties = new NameValueCollection 
      { 
       { "quartz.serializer.type", "binary" } 
      }; 
      properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"; 
      properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"; 
      properties["quartz.jobStore.dataSource"] = "default"; 
      properties["quartz.dataSource.default.connectionString"] = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=quartznet;Data Source=.\\sqlInstance;"; 
      properties["quartz.dataSource.default.provider"] = "SqlServer"; 
      properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; 
      properties["quartz.jobStore.useProperties"] = "true"; 
      properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; 

      StdSchedulerFactory factory = new StdSchedulerFactory(properties); 
      IScheduler scheduler = await factory.GetScheduler(); 
Смежные вопросы