C# 从我的asp.net mvc web应用程序调用asp.net控制台应用程序
我使用visual studio 2012创建了一个asp.net控制台应用程序,该控制台应用程序是ERP系统和自定义数据库之间的同步作业。现在我需要这个同步作业及时运行,所以我在windows任务调度器下创建了一个新任务,它每小时调用控制台应用程序,效果很好 但我需要有能力由最终用户手动运行控制台应用程序,主要用户可以登录到我们的web应用程序(asp.net mvc),然后从那里他们可以单击“同步”按钮,这个“同步”按钮将主要调用控制台应用程序。。。那么这可能吗?我的意思是,我可以让我的web应用程序调用控制台应用程序,就像任务Schuler调用控制台应用程序一样吗C# 从我的asp.net mvc web应用程序调用asp.net控制台应用程序,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,我使用visual studio 2012创建了一个asp.net控制台应用程序,该控制台应用程序是ERP系统和自定义数据库之间的同步作业。现在我需要这个同步作业及时运行,所以我在windows任务调度器下创建了一个新任务,它每小时调用控制台应用程序,效果很好 但我需要有能力由最终用户手动运行控制台应用程序,主要用户可以登录到我们的web应用程序(asp.net mvc),然后从那里他们可以单击“同步”按钮,这个“同步”按钮将主要调用控制台应用程序。。。那么这可能吗?我的意思是,我可以让我的we
第二个问题,如果我设法从asp.net mvc web应用程序调用控制台应用程序,这会迫使控制台应用程序在IIS下运行吗?或者web应用程序可以调用IIS范围之外的控制台应用程序?与从任务调度器调用控制台应用程序类似?您可以创建一个web服务(使用asp.net web api)并将同步代码放入其中。Web API可以托管在IIS中(或者您也可以进行非IIS托管),当用户单击UI中的“同步”按钮时,您可以从asp.net mvc应用程序访问此Web API端点。您可以使用
HttpClient
类对web api进行Http调用
现在,从正在从任务调度器调用的控制台应用程序中,您可以执行相同的操作。ie:您可以使用HttpClient
类对web api端点进行http调用,该端点执行代码以同步数据
虽然这回答了您最初的问题,但事实确实如此。由于很多原因,应用程序域随时都可能宕机,这也会使您的长期运行任务宕机。但幸运的是,有一些优雅且简单易用的解决方案可用
这些库是针对ASP.NET中在后台手动运行某些代码的一些缺陷而设计的。请看一看scott在其中解释了如何使用这些库。您可以从web应用程序执行任何命令 你可以看看这里
问题1:是的,你可以
public ActionResult Index()
{
Process.Start(@"c:\Windows\System32\cmd.exe");
return View();
}
问题2:进程将在IIS帐户下运行,该帐户可能没有进程所需的权限。您可以在调用Process.Start()之前模拟其他用户。请参见此示例:
创建一个与windows服务通信的web api(可能使用grpc)。
用户单击按钮-->请求点击web api端点-->grpc调用windows服务(grpc服务器)--->windows服务运行应用程序但此命令是否在IIS作用域下运行,因为我想避免同步作业在IIS作用域下运行?当我说在IIS作用域下,我不是指权限,,我想问的是:-现在假设我的web应用程序调用控制台应用程序,控制台应用程序开始运行,并且在控制台应用程序执行期间,应用程序池重新启动,,这是否会导致控制台应用程序也重新启动..或者它不会受到影响。哦,我明白了。我很肯定它会继续下去。在Windows中,终止父进程通常对不与父进程通信的子进程没有影响。不要担心,可能我没有解释我的问题。。你的意思是我可以让asp.net mvc调用我的控制台应用程序,就像任务调度器调用控制台应用程序一样。当然,使用tasks scheduler会临时调用它,而web应用程序会由最终用户手动调用它…您能否提供一些链接,说明如何从asp.net mvc调用控制台应用程序?public ActionResult Index(){Process.Start(@“c:\Windows\System32\cmd.exe”);return View()}我刚刚尝试了这个方法,即使您停止IIS,进程也会保持运行,但不建议在IIS下运行后台作业,例如我的同步作业。。这就是为什么我选择将同步作业作为控制台应用程序的原因,但我希望最终用户能够从我们的web应用程序中手动执行此控制台应用程序,此外还可以使用任务调度器及时执行…现在这里有很多讨论,现在我以前使用了HangFire,,但最终IIS不是设计用来运行后台作业的,所以我选择将其作为控制台应用程序,但我想知道我是否可以从asp.net mvc调用此控制台应用程序…使用hangfire运行后台作业时,我还面临一个问题,即如果网站上没有任何活动,在第一个用户访问应用程序之前,后台作业不会运行,这与后台作业作为任务调度器中的任务运行不同。。。虽然将始终按计划运行,但任何解决方案都可以运行:)从任务计划程序执行的控制台作业对我来说似乎是一个健壮的选项。另外,如果您非常喜欢从其他c#代码(mvc应用程序)调用控制台应用程序。看看你是否知道,选择如何运行后台作业是我遇到过的最令人困惑的话题,因为很多人都说IIS不是设计用来运行一般的后台作业,特别是长时间运行的后台作业。但另一方面,也有很多工具,比如hangfire,它是为在iis下运行后台作业而设计的,很多文章都支持这些工具,但是你也可以发现很多人也反对这些工具。。。所以不确定哪种观点是正确的?