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"]
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.
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.