从我的asp.net mvc web应用程序调用asp.net控制台应用程序
本文关键字:net 应用程序 asp 调用 控制台 mvc 我的 web | 更新日期: 2023-09-27 18:30:07
我使用visual studio 2012创建了一个asp.net控制台应用程序,控制台应用程序是我们的ERP系统和自定义数据库之间的同步作业。现在我需要这个同步作业及时运行,所以我在windows任务调度程序下创建了一个新任务,它每小时调用控制台应用程序,效果很好。
但我需要有能力由最终用户手动运行控制台应用程序,主要是用户可以登录我们的web应用程序(asp.net mvc),然后点击"同步"按钮,这个"同步"按键将主要调用控制台应用程序。。。那么这可能吗?我的意思是,我可以让我的web应用程序调用控制台应用程序吗?
第二个问题是,如果我设法从asp.net mvc web应用程序调用控制台应用程序,这会迫使控制台应用程序在IIS下运行吗?或者web应用程序可以在IIS范围之外调用控制台应用程序?类似于从任务调度程序调用控制台应用程序?
问题1:是的,你可以。
public ActionResult Index()
{
Process.Start(@"c:'Windows'System32'cmd.exe");
return View();
}
问题2:进程将在IIS帐户下运行,该帐户可能没有进程所需的权限。在调用Process.Start()之前,您可以模拟另一个用户。请参阅以下示例:
更改运行windows窗体程序的用户
您可以创建一个web服务(使用asp.net web api),并将同步代码放入其中。Web API可以托管在IIS中(或者您也可以进行非IIS托管),当用户单击UI中的同步按钮时,您可以从asp.net mvc应用程序访问此Web API端点。您可以使用HttpClient
类对web api进行Http调用。
现在,从任务调度程序调用的控制台应用程序中,您也可以执行同样的操作。即:您可以使用HttpClient
类对执行代码以同步数据的webapi端点进行http调用。
虽然这回答了你最初的问题,但在asp.net线程上运行这样的后台任务不是一个好主意。由于多种原因,应用程序域可能随时关闭,它也会占用您的长期任务。但幸运的是,有一些优雅且易于使用的解决方案。
- HangFire
- FluentScheduler
- 石英
这些库是围绕着在ASP.NET后台手动运行某些代码的一些陷阱而设计的。看看这篇博客文章,scott在其中解释了如何使用这些库。
创建一个与windows服务通信的web api(可能使用grpc)。用户点击按钮-->请求点击web api端点-->对windows服务(grpc服务器)的grpc调用-->windows服务运行应用程序
您可以从web应用程序执行任何命令你可以看看这里从C#代码运行exe