WebAPI application_start未在IIS服务器

时间:2018-04-17 19:15:59

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

我正在构建一个新的WebAPI服务。到目前为止,它有一个端点调用我的Logic项目中的一个方法,该方法调用我的EF Repository项目中的方法。它在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)项目类型。在该选择之后的对话框中,我选择了Empty模板并选中复选框以添加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时,它会立即失败,并且没有一分钟的延迟。

什么会使Application_Start 运行?

1 个答案:

答案 0 :(得分:2)

I found the issue. The new IIS site that was serving up my new service had an app pool that defaulted to .NET Framework v2 instead of v4. When I updated the app pool to v4, the service started working.