为啥 ASP.NET web api 3 项目在 ASP.NET web api 2 执行时没有请求就无法启动?

Posted

技术标签:

【中文标题】为啥 ASP.NET web api 3 项目在 ASP.NET web api 2 执行时没有请求就无法启动?【英文标题】:why ASP.NET web api 3 project won't start without a requast when ASP.NET web api 2 do?为什么 ASP.NET web api 3 项目在 ASP.NET web api 2 执行时没有请求就无法启动? 【发布时间】:2021-05-04 18:44:10 【问题描述】:

我有几个使用 .Net core 2 的 ASP.NET Web Api 项目的解决方案。 我在这个解决方案中添加了一个新的 .net core 3.1 项目,新项目中有一个托管服务,所以即使没有对服务器进行请求,应用程序也需要运行。

在尝试在 IIS 上部署我的新项目(并按照in this question 的描述配置它)后,我注意到服务没有启动(我在主函数开始时记录了一条信息消息,以确保应用程序已启动)。 回到 Visual Studio,我在项目的 main 函数中放置了一个断点,发现除非对应用程序发出请求,否则断点不会命中。

此时,我试图将托管模型更改为“进程外”,但这种行为坚持了下来。 我在其中一个 .Net core 2 项目的 main 函数中设置的断点确实命中,即使没有请求。

我使用 IIS express 启动了这两个项目,它们都设置为在启动时不启动浏览器,除了它们编译到的 .net 核心版本之外,我在这两个项目的设置中找不到任何其他差异。

谁能解释这种行为变化以及如何解决它?

【问题讨论】:

根据您的项目设置,VS 可能会在启动您的 Web 应用程序时向 IIS Express 发送初始请求。因此,您不能对 VS/IIS Express 下任何结论并期望它适用于完整的 IIS。 您的 .net core 3.1 项目是做什么用的?你的意思是它可以在VS中运行,但不能在IIS中运行? 【参考方案1】:

我花了很长时间,但我设法解决了这个问题。 在项目设置的“调试”选项卡下有两个组合框:

个人资料 启动

两者都需要设置为“IIS Express”,应用程序才能在不进行请求的情况下启动。 正如在 cmets 中写给我的,这并没有解决我在完整 IIS 上运行我的应用程序的问题,那里的问题原来是缺少 web.config 文件中的“处理程序”标签

【讨论】:

以上是关于为啥 ASP.NET web api 3 项目在 ASP.NET web api 2 执行时没有请求就无法启动?的主要内容,如果未能解决你的问题,请参考以下文章

为啥从 ASP.NET Core Web API 的 ControllerBase 与 Controller 派生?

Asp.net core 3.1 保护 API 和 Web 应用程序

为啥我的 ASP.Net Core Web API 控制器不返回 XML?

ASP.NET Core 3.1 / 5 WeatherForecast 示例 Web API 项目引发错误 404

为啥我的异步 ASP.NET Web API 控制器阻塞了主线程?

ASP.NET Core api 项目 3.1 在 IIS 上发布