Appel d’une application de console asp.net à partir de mon application Web asp.net mvc

J’ai créé une application console asp.net à l’aide de visual studio 2012; cette application est un travail de synchronisation entre notre système ERP et notre firebase database personnalisée. À présent, j’ai besoin que ce travail de synchronisation s’exécute au bon moment. J’ai donc créé une nouvelle tâche dans notre planificateur de tâches Windows, qui appelle la console toutes les heures, ce qui fonctionne bien.

mais j’ai besoin de pouvoir exécuter manuellement l’application console par les utilisateurs finaux, principalement ceux-ci pouvant se connecter à notre application Web (asp.net mvc) et à partir de là, ils peuvent cliquer sur le bouton “Sync”, où ce bouton “Sync” appellera principalement l’application console … est-ce possible? est-ce que je peux avoir mon application web appelle l’application console, de la même manière que Task Schuler appelle l’application console?

Deuxième question, si je parviens à appeler l’application console à partir de mon application Web asp.net mvc, cela forcera-t-il l’application console à s’exécuter sous IIS? ou l’application Web peut-elle appeler l’application console en dehors de la scope d’IIS? similaire à l’appel de l’application console à partir du planificateur de tâches?

Question 1: Oui vous pouvez.

public ActionResult Index() { Process.Start(@"c:\Windows\System32\cmd.exe"); return View(); } 

Question 2: le processus s’exécutera sous le compte IIS, qui peut ne pas avoir les privilèges dont votre processus a besoin. Vous pouvez emprunter l’identité d’un autre utilisateur avant d’appeler Process.Start (). Voir cet exemple:

Changer d’utilisateur pour l’exécution du programme Windows Forms

Vous pouvez créer un service Web ( utilisez asp.net web api ) et y insérer votre code de synchronisation. L’API Web peut être hébergée dans IIS (ou vous pouvez également effectuer un hébergement autre que IIS) et vous pouvez accéder à ce sharepoint terminaison api Web à partir de votre application asp.net mvc lorsque l’utilisateur clique sur le bouton de synchronisation dans l’interface utilisateur. Vous pouvez utiliser la classe HttpClient pour effectuer l’appel HttpClient à l’API Web.

À partir de votre application console, appelée depuis le planificateur de tâches, vous pouvez faire de même. C’est-à-dire que vous pouvez utiliser la classe HttpClient pour effectuer un appel http vers le sharepoint terminaison api Web qui exécute votre code pour synchroniser vos données.

Bien que cela réponde à votre question initiale, ce n’est pas une bonne idée d’exécuter une tâche en arrière-plan sur un fil asp.net . Le domaine de l’application peut être désactivé à tout moment pour de nombreuses raisons, ce qui ralentira également votre tâche. Mais heureusement, il existe des solutions élégantes et simples à utiliser.

  1. HangFire
  2. FluentScheduler
  3. Quartz

Ces bibliothèques ont été conçues autour des pièges de l’exécution manuelle de code en arrière-plan dans ASP.NET. Jetez un coup d’œil à ce billet de blog où scott explique comment utiliser ces bibliothèques.

Vous pouvez exécuter n’importe quelle commande à partir de votre application Web, vous pouvez regarder ici Exécuter un exe à partir de code C #