以编程方式重新启动.NET Web应用程序的最快方法

问题描述

我正在为Web应用程序编写一些e2e测试,在该应用程序中,我需要与之交互的大量代码不在我的控制范围内。为了在每个测试或一组测试的开始时设置应用程序,我打算使用sql脚本将数据库设置为已知状态,然后强制Web应用程序重新启动,以便将控件外部的所有内部缓存全部重置

牢记这一点,是否有人知道哪种方法可以使我重新启动Web应用程序最快?

我拥有的选项是:

  1. 触摸web.config
  2. 创建然后在根目录中删除一个app_offline.htm文件
  3. 创建一些可以调用HttpRuntime.UnloadAppDomain的API

这些方法是否比其他任何方法都快?它们都有效吗?

解决方法

使用选项3:

System.Web.HttpRuntime.UnloadAppDomain();

此方法终止当前应用程序。下次收到请求时,应用程序将重新启动。

请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.web.httpruntime.unloadappdomain?view=netframework-4.8

,

我建议公开一个端点,该端点将清除/刷新缓存。可以从您的电子测试中获取该端点吗?

,

根据您建议的方法:

  1. 触摸web.config
  2. 创建然后在根目录中删除一个app_offline.htm文件
  3. 创建一些可以调用HttpRuntime.UnloadAppDomain的API

1 2 似乎有些笨拙,需要编码一个单独的API才能以编程方式进行。 3似乎不那么笨拙,但绝对需要编写API。

根据我的评论,我不确定重启应用程序是否必要或将完成您需要的操作,因为重新播种的数据不会缓存在GAC中。如果数据来自Web API,则可以考虑重新启动该API。最好的方法是通过[![IIS AppPool advanced settings][1]][1]

您要确保设置如下: 启动模式:按需 *空闲超时(分钟):0 空闲超时操作:终止

所有这些设置都是默认设置,但超时分钟除外,默认情况下为20。通过在您的应用程序或第三方AP上将其设置为0,该应用程序将终止(从GAC中转储)并在收到新的Web请求时重新启动。

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...