Asp.net 第一个Web API请求触发应用程序启动的执行

Asp.net 第一个Web API请求触发应用程序启动的执行,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我有一个Web应用程序,它还集成了一个Web API。就在今天,我发现自己很惊讶地看到Web API上的第一个REST请求重新触发了应用程序的执行。\u Start(尽管它在启动网页时已经运行过)。在读取和之后,REST请求似乎正在生成一个新的HttpApplication 此外,MSDN上还显示: 首次在应用程序中请求ASP.NET页面或进程时,会创建HttpApplication类的新实例。但是,为了最大限度地提高性能,HttpApplication实例可能会被多个请求重用 在我看来,每个请

我有一个Web应用程序,它还集成了一个Web API。就在今天,我发现自己很惊讶地看到Web API上的第一个REST请求重新触发了
应用程序的执行。\u Start
(尽管它在启动网页时已经运行过)。在读取和之后,REST请求似乎正在生成一个新的
HttpApplication

此外,MSDN上还显示:

首次在应用程序中请求ASP.NET页面或进程时,会创建HttpApplication类的新实例。但是,为了最大限度地提高性能,HttpApplication实例可能会被多个请求重用

在我看来,每个请求都可能产生一个新的
HttpApplication
,因此,
Application\u Start
必须以重入或幂等方式编写。这个结论正确吗


在我的具体例子中,我正在初始化
应用程序\u Start
中的一个日志编写器,由于该文件已被使用,因此第二次失败。我想在应用程序池回收的情况下,这不会是一个问题,因为资源在这两者之间被释放。

您可以在提供的链接上进一步阅读

Application_Start和Application_End方法是不表示HttpApplication事件的特殊方法。ASP.NET在应用程序域的生命周期内调用它们一次,而不是针对每个HttpApplication实例

因此,无需以重入或幂等方式编写
应用程序_Start

此外,回收IIS时不会调用
应用程序\u Start
。当IIS实际加载应用程序时,在回收后的第一个请求上调用它


至于您的错误,请确保您正在处理
应用程序\u End上的记录器,以便释放文件句柄。

我的问题似乎是由于在IIS Express中从VS进行调试时应用程序是如何启动的。我无法用当前的代码库复制它。