首先,如果这是一个重复的问题,我先向您道歉。
我编写了一个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();
在我进一步研究并开始添加一种返回状态等方法之前,我想与大家一起检查这是否是一种好方法和/或是否有更好的方法?
谢谢!
答案 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