如何使 asp.net mvc web 应用程序持续保持活动状态 运行
How to keep asp.net mvc web application alive to continously running
我创建了一个 asp.net mvc 项目。在这个项目中,我总是想要一些代码 运行。我在网络托管服务上发布我的代码。我第一次通过向我的域发送 http 请求来启动应用程序,我希望该应用程序始终保持活动状态并且永远不会关闭。但这并没有发生。
我什至看到一些解决方案说如果我有时在我的代码中 ping 我的域会阻止应用程序关闭。但是这个解决方案将应用程序生命周期延长到大约 24 小时(并不总是!!!)
这是我的代码:
public class Main
{
public static void main()
{
while (true)
{
try
{
// some codes
}catch(Exception exp)
{
// log the exception message, (but any exception hasn't occurred till now
}
}
}
}
Global.asax:(通过使用这段代码,应用程序很快就关闭了,这样我使用了一个虚拟控制器)
public class MvcApplication : System.Web.HttpApplication
{
static Thread keepAliveThread = new Thread(KeepAlive);
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
keepAliveThread.Start();
Main.main();
}
protected void Application_End()
{
keepAliveThread.Abort();
}
static void KeepAlive()
{
while (true)
{
WebRequest req = WebRequest.Create("http://mydomain/Home/Index");
req.GetResponse();
try
{
Thread.Sleep(60000);
}
catch (ThreadAbortException)
{
break;
}
}
}
}
Global.asax:(通过使用此代码,应用程序停留 运行 大约 24 小时。这样我不使用任何控制器)
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
Main.main();
Timer timer = new Timer(new TimerCallback(refreshSession));
timer.Change(0, 5 * 60 * 1000); // 5 min
}
static void refreshSession(object state)
{
Unirest.get("http://mydomain/");
}
}
对于我的目的,有没有更好的解决方案?如果是,请给我一个示例代码。
通常这称为 scheduled/background 个职位。您可以使用 "scheduled" 进行谷歌搜索。大多数主机都提供一些方法来从控制面板进行操作。例如,在天蓝色上,您可以使用 "webjobs".
请注意,有一些众所周知的后台作业解决方案,例如 hangfire。除非万不得已,否则不要重新发明轮子。
我创建了一个 asp.net mvc 项目。在这个项目中,我总是想要一些代码 运行。我在网络托管服务上发布我的代码。我第一次通过向我的域发送 http 请求来启动应用程序,我希望该应用程序始终保持活动状态并且永远不会关闭。但这并没有发生。
我什至看到一些解决方案说如果我有时在我的代码中 ping 我的域会阻止应用程序关闭。但是这个解决方案将应用程序生命周期延长到大约 24 小时(并不总是!!!)
这是我的代码:
public class Main
{
public static void main()
{
while (true)
{
try
{
// some codes
}catch(Exception exp)
{
// log the exception message, (but any exception hasn't occurred till now
}
}
}
}
Global.asax:(通过使用这段代码,应用程序很快就关闭了,这样我使用了一个虚拟控制器)
public class MvcApplication : System.Web.HttpApplication
{
static Thread keepAliveThread = new Thread(KeepAlive);
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
keepAliveThread.Start();
Main.main();
}
protected void Application_End()
{
keepAliveThread.Abort();
}
static void KeepAlive()
{
while (true)
{
WebRequest req = WebRequest.Create("http://mydomain/Home/Index");
req.GetResponse();
try
{
Thread.Sleep(60000);
}
catch (ThreadAbortException)
{
break;
}
}
}
}
Global.asax:(通过使用此代码,应用程序停留 运行 大约 24 小时。这样我不使用任何控制器)
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
Main.main();
Timer timer = new Timer(new TimerCallback(refreshSession));
timer.Change(0, 5 * 60 * 1000); // 5 min
}
static void refreshSession(object state)
{
Unirest.get("http://mydomain/");
}
}
对于我的目的,有没有更好的解决方案?如果是,请给我一个示例代码。
通常这称为 scheduled/background 个职位。您可以使用 "scheduled" 进行谷歌搜索。大多数主机都提供一些方法来从控制面板进行操作。例如,在天蓝色上,您可以使用 "webjobs".
请注意,有一些众所周知的后台作业解决方案,例如 hangfire。除非万不得已,否则不要重新发明轮子。