Quartznet: System.PlatformNotSupportedException s'exécutant dans un conteneur basé sur Linux

Créé le 11 août 2017  ·  5Commentaires  ·  Source: quartznet/quartznet

Version : 3.0.0 - alpha3

Je viens d'exécuter l'application console dans le conteneur Docker et j'ai obtenu l'exception PlatformNotSupportedException suivante au début. La même application fonctionne très bien sous Windows .NET Core 2.0.
On dirait qu'il s'agit de l'un des paramètres de propriétés Thread qui lance ceci (le numéro de ligne n'aide pas pour une raison quelconque).

Des idées?

[16:44:51] [Info] [  ]Quartz.NET properties loaded from configuration file '/app/quartz.config'
[16:44:51] [Info] [  ]Registering datasource 'myDS' with db provider: 'Quartz.Impl.AdoJobStore.Common.DbProvider'
[16:44:51] [Info] [  ]Using object serializer: Quartz.Simpl.JsonObjectSerializer, Quartz.Serialization.Json
[16:44:51] [Info] [  ]Initialized Scheduler Signaller of type: Quartz.Core.SchedulerSignalerImpl
[16:44:51] [Info] [  ]Quartz Scheduler v.3.0.0.0 created.
[16:44:51] [Info] [  ]Using db table-based data access locking (synchronization).
[16:44:51] [Info] [  ]JobStoreTX initialized.
[16:44:51] [Info] [  ]Scheduler meta-data: Quartz Scheduler (v3.0.0.0) 'Service' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'Quartz.Core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'Quartz.Simpl.DefaultThreadPool' - with 10 threads.
  Using job-store 'Quartz.Impl.AdoJobStore.JobStoreTX' - which supports persistence. and is clustered.

[16:44:51] [Info] [  ]Quartz scheduler 'Service' initialized
[16:44:51] [Info] [  ]Quartz scheduler version: 3.0.0.0
[16:44:52] [Info] [  ]ClusterManager: detected 1 failed or restarted instances.
[16:44:52] [Info] [  ]ClusterManager: Scanning for instance "NON_CLUSTERED"'s failed in-progress jobs.
Host start was not succeeded: System.PlatformNotSupportedException: COM interop is not supported on this platform.
   at Quartz.Util.QueuedTaskScheduler..ctor(Int32 threadCount, String threadName, Boolean useForegroundThreads, ThreadPriority threadPriority, ApartmentState threadApartmentState, Action threadInit, Action threadFinally) in C:\projects\quartznet-6fcn8\src\Quartz\Util\QueuedTaskScheduler.cs:line 72
   at Quartz.Impl.AdoJobStore.ClusterManager.<Initialize>d__8.MoveNext() in C:\projects\quartznet-6fcn8\src\Quartz\Impl\AdoJobStore\ClusterManager.cs:line 36
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Quartz.Impl.AdoJobStore.JobStoreSupport.<SchedulerStarted>d__131.MoveNext() in C:\projects\quartznet-6fcn8\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 493
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Quartz.Core.QuartzScheduler.<Start>d__68.MoveNext() in C:\projects\quartznet-6fcn8\src\Quartz\Core\QuartzScheduler.cs:line 371

quartz.config

quartz.scheduler.instanceName = AUTO
quartz.jobStore.clustered = true
quartz.scheduler.instanceName = Service
quartz.scheduler.idleWaitTime = 10000
quartz.scheduler.batchTriggerAcquisitionMaxCount = 10

quartz.threadPool.threadCount = 10

quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz
quartz.jobStore.tablePrefix = QRTZ_
quartz.jobStore.dataSource = myDS
quartz.dataSource.myDS.connectionString = Server=localhost;Database=Service;uid=service;pwd=1
quartz.dataSource.myDS.provider = MySql
quartz.jobStore.useProperties = false

quartz.serializer.type = json

fichier docker

FROM microsoft/dotnet:2.0.0-preview2-runtime-stretch
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Service.dll"]

Commentaire le plus utile

J'essaierai de sortir la sortie le week-end prochain au plus tard. J'essaie vraiment de trouver d'éventuels changements de rupture à mettre dans la prochaine version afin que je puisse l'appeler bêta en toute bonne conscience. Je suis désolé pour le retard mais je n'ai pas eu trop de temps libre ces derniers temps.

Tous les 5 commentaires

J'ai examiné cela un peu plus en profondeur et il semble que cette ligne dans QueuedTaskScheduler échoue

_threads[i].SetApartmentState(threadApartmentState);

Si je commente simplement cette ligne et que je la reconstruis, elle commence à fonctionner. Il semble donc que nous devrions avoir la possibilité de désactiver cela complètement via la configuration ou simplement de construire netstandard 2.0 sans le commutateur THREAD_APARTMENTSTATE comme solution de contournement rapide pour le moment.

Merci pour le rapport et l'enquête détaillée. J'ai poussé un correctif pour cela. Nous n'avons vraiment pas besoin de définir THREAD_APARTMENTSTATE pour .NET Core comme pour COM Interop.

@lahma Awesome ceci a été corrigé pour beta-1 , j'ai touché cela en essayant également docker + .net standard 2.0 + quartz-net alpha3. Serait-il possible de publier beta-1 dans le flux AppVeyor NuGet ou le nuget lui-même afin qu'il puisse être référencé et utilisé pour les tests ?

Serait-il possible pour vous de publier une nouvelle alpha dans vos flux nuget avec cela inclus ? Il existe ici un problème aggravant avec MVC et la localisation des assemblys de référence locaux, comme c'est le cas lors de la compilation à partir de la source et du référencement de cette dll de projet. Vos modifications corrigent cette erreur de démarrage.

Il s'agit d'un problème connu avec Impossible de résoudre les chemins d'assemblage pour les bibliothèques de compilation de référence et il semble que .NET Core 2.1 aura probablement ce correctif bien qu'il ne soit pas publié avant le premier trimestre 2018. Si nous pouvions à nouveau utiliser les dll de flux tout s'assemble à nouveau de manière transparente et nous permet de faire plus de tests avec .NET Core 2.0

J'essaierai de sortir la sortie le week-end prochain au plus tard. J'essaie vraiment de trouver d'éventuels changements de rupture à mettre dans la prochaine version afin que je puisse l'appeler bêta en toute bonne conscience. Je suis désolé pour le retard mais je n'ai pas eu trop de temps libre ces derniers temps.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

lahma picture lahma  ·  11Commentaires

lahma picture lahma  ·  19Commentaires

lucamazzanti picture lucamazzanti  ·  15Commentaires

frapid picture frapid  ·  45Commentaires

kevinchalet picture kevinchalet  ·  7Commentaires