5 votes

.Net Core 2.1 Rapport sur la progression d'une longue tâche

Je suis en train de réécrire une très ancienne application VB en une application C# ASP.Net basée sur un navigateur et utilisant Core 2.1 et Entity Framework en back-end sur le serveur SQL.

Plusieurs de ces fonctions sont des tâches de longue haleine. Par exemple, l'importation d'un fichier CSV de répertoire d'adresses. Ces fichiers font généralement 50 à 100 Mo et doivent être analysés. J'ai écrit une fonction de téléchargement et d'importation, qui fonctionne en 15 minutes environ - la plupart du temps, il s'agit du temps d'écriture dans la base de données.

J'essaie de trouver un moyen d'exécuter le processus d'importation de manière à ce qu'il puisse signaler la progression au navigateur du client, idéalement en transformant l'option de menu en une barre de progression jusqu'à ce que la tâche soit terminée - puisque le fichier _layout.cshtml se trouve sur chaque page, cela permettrait à tout utilisateur de savoir que la tâche est en cours et quand elle se terminera.

J'ai regardé IHostedServices et les fonctions BackgroundService, mais je ne trouve pas d'exemples qui correspondent à ce que j'essaie de faire. J'ai vu un article sur MVC5 qui utilisait SignalR et Knockout (avec lesquels je suis moins familier) mais il n'utilise pas les fonctions Core 2+ ou les fonctions de service plus récentes.

Quelqu'un peut-il m'indiquer un bon exemple de quelque chose comme ça dans .Net Core > 2.0 ?

Merci d'avance.

2voto

greyxit Points 517

Pour un processus de longue durée, vous pouvez utiliser le très répandu Hangfire

Le suivi de la progression via SignalR est décrit dans la documentation : http://docs.hangfire.io/en/latest/background-processing/tracking-progress.html

Il est compatible avec .Net Core 2.1.

0voto

Steve J Points 148

Personnellement, j'écrirais un service Windows pour effectuer le traitement en utilisant quelque chose comme Topshelf : http://topshelf-project.com/

Ainsi, votre application ASP appelle ce processus avec les données qui doivent être traitées et il s'exécute. Ajoutez un point de terminaison (peut-être avec quelque chose comme Nancy : http://nancyfx.org/ ) que votre application ASP peut appeler pour récupérer les informations sur la progression.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X