iis-7 - WebAPI application_start 未在 IIS 服务器上执行

标签 iis-7 asp.net-web-api2 startup

我正在构建一个新的 WebAPI 服务。到目前为止,它有一个端点调用我的 Logic 项目中的一种方法,该方法又调用我的 EF 存储库项目中的一种方法。当我在 Visual Studio 的 IIS Express 中运行它时,它可以工作。当我将其发布到 IIS 站点 (IIS 7.5) 时,我收到 404 Not Found 并且似乎 application_start 从未运行。我向 application_start 添加了代码以引发异常,但我从未看到该异常,只看到 404 Not Found。 我在 Visual Studio 2015 中创建了该服务。我使用了 ASP.NET Web 应用程序 (.NET Framework) 项目类型。在该选择之后的对话框中,我选择了“空”模板,并选中复选框以添加 Web API 的文件夹和核心引用。根据这些选择,项目安装了以下 Nuget 包:Microsoft.AspNet.WebApi、Microsoft.AspNet.WebApi.Client、Microsoft、AspNet.WebApi.Core 和 Microsoft.AspNet.WebApi.WebHost。 (它还有一些其他包,但这些都是 WebApi 包。 我的 global.asax.cs 代码如下所示:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        //throw new ApplicationException("This is just a test");
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

我的 WebApiConfig.Register 方法如下所示:

    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

但是,正如我所说,当我将代码部署到 IIS 时,我不相信上述任何代码正在执行。当我取消注释 Application_Start 中的 throw 语句时,我从未看到抛出的异常。有时,在调试此问题时,我也会在 Application_Start 中使用 Sleep(60000) 语句。在 Visual Studio 中的 IIS Express 中运行,我可以看到一分钟的延迟。当部署到 IIS 时,它会立即失败并显示 404 - 没有一分钟的延迟。

什么会导致Application_Start无法运行?

最佳答案

我发现了这个问题。为我提供新服务的新 IIS 站点有一个默认为 .NET Framework v2 而不是 v4 的应用程序池。当我将应用程序池更新到 v4 时,该服务开始工作。

关于iis-7 - WebAPI application_start 未在 IIS 服务器上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49885876/

相关文章:

c# - 利用浏览器缓存不缓存 Javascript 和 CSS 文件

iis-7 - 使用签名程序集时 IIS7 中的 AutoMapper 出现问题

asp.net-web-api - 使用 web api 在请求正文中使用复杂类型参数获取请求

c# - 如何让我们的窗体(应用程序)在Windows启动时在C#中开始运行?

asp.net-mvc - 在 IIS7 集成模式下获取 NullReferenceException

asp.net - IIS7 404错误

c# - 身份验证过滤器 : How to do a HTTP 401 with message

c# - 多个可选的查询字符串参数 REST API GET

visual-studio - 如何通过 CMake 更改 Visual Studio 解决方案的启动项目?