C#的MVC总是运行线程?

时间:2018-11-01 13:58:35

标签: c# asp.net asp.net-mvc vb.net

首先,如果这是一个重复的问题,我先向您道歉。

我编写了一个Windows服务(c#.net 4.7),该服务创建了一个与警报面板的TcpClient连接,并侦听传入的数据,然后将数据转发到用于连接其他服务的网站。为了提高可靠性,我想将此功能移植到C#MVC网站上,以便我可以监视它的状态(确保它仍处于连接状态,警报没有关闭等)。

我开始创建MVC项目,并在global.asax文件中启动了一个新线程,该线程加载/运行了最初为winService创建的类。

[prestashop_root_dir]/app/cache/pro/class_index.php

然后在我的HomeController中,我添加了一个Poll()ActionResult:

Application["MyTcpClass"] = new MyTcpClass();

在我进一步研究并开始添加一种返回状态等方法之前,我想与大家一起检查这是否是一种好方法和/或是否有更好的方法?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您需要在后台打开自定义TcpClient,最好将其作为Windows服务保留。 ASP.NET只会使其复杂化。

对于其中一个(假设您将其托管在IIS中),默认情况下,如果IIS在20分钟内未收到任何传入请求,则IIS将关闭它们。您可以完全关闭该行为,但是期望IIS保持应用程序100%的运行时间仍然不可靠。网站旨在响应HTTP请求,而不是运行后台任务。

如果您想建立一个可以检查服务运行状况的网站,那么一种实现方法是在服务中使用HttpListener来构建Web应用程序可以调用的Web服务。我之前在我从事的项目中就已经做到了。这里有一个使用方法的示例:https://www.codeproject.com/Articles/599978/An-HttpListener-Server-for-Handling-AJAX-POST-Requ

更新:我发现该示例太忙了,因此我根据过去所做的项目创建了自己的示例:http://www.gabescode.com/dotnet/2018/11/01/basic-HttpListener-web-service.html