从我的asp.net mvc Web应用程序调用asp.net控制台应用程序
我使用visual studio 2012创建了一个asp.net控制台应用程序,控制台应用程序是我们的ERP系统和我们的自定义数据库之间的同步工作。 现在我需要这个同步作业及时运行,所以我在我们的Windows任务调度程序下创建了一个新任务,它每小时调用一次控制台应用程序,效果很好。
但我需要能够由最终用户手动运行控制台应用程序,主要是用户可以登录我们的Web应用程序(asp.net mvc),然后他们可以点击“同步”按钮,这里有“同步”按钮将主要调用控制台应用程序…这可能吗? 我的意思是我可以让我的Web应用程序调用控制台应用程序,就像Task Schuler调用控制台应用程序一样吗?
第二个问题,如果我设法从我的asp.net mvc web应用程序调用控制台应用程序,这会强制控制台应用程序在IIS下运行吗? 或者Web应用程序可以在IIS范围外调用控制台应用程序? 类似于从任务调度程序调用控制台应用程序?
问题1:是的,你可以。
public ActionResult Index() { Process.Start(@"c:WindowsSystem32cmd.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
类对Web api端点进行http调用,该端点执行您的代码以同步您的数据。
虽然这回答了你原来的问题,但在asp.net线程上运行这样的后台任务并不是一个好主意 。 App域可能会因为很多原因而随时关闭,它也会占用您长时间运行的任务。 但幸运的是,有一些优雅和简单易用的解决方案。
- 迟发型
- FluentScheduler
- 石英
这些库是围绕在ASP.NET中后台手动运行某些代码的一些缺陷而设计的。 看一下这篇博客文章 ,其中scott解释了如何使用这些库。
您可以从Web应用程序执行任何命令,您可以在此处查看从C#代码运行exe
上述就是C#学习教程:从我的asp.net mvc Web应用程序调用asp.net控制台应用程序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/958379.html