WebAPI application_start 未在 IIS 服务器上执行
WebAPI application_start not executing on IIS server
我正在构建一个新的 WebAPI 服务。到目前为止,它有一个端点调用我的逻辑项目中的方法,该方法调用我的 EF 存储库项目中的方法。当我在 Visual Studio 中的 IIS Express 中 运行 它时,它起作用了。当我将它发布到 IIS 站点 (IIS 7.5) 时,我收到 404 Not Found 并且看起来好像 application_start 从来没有 运行s。我将代码添加到 application_start 以抛出异常,但我从未看到该异常,只有 404 Not Found。
我在 Visual Studio 2015 年创建了该服务。我使用了 ASP.NET Web 应用程序 (.NET Framework) 项目类型。在 selection 之后的对话框中,我选择了空模板和 select 复选框来为 Web API 添加文件夹和核心引用。基于这些 selection,该项目安装了以下 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) 语句。 运行 在 IIS Express 中 Visual Studio,我可以看到一分钟的延迟。当部署到 IIS 时,它立即失败并显示 404 - 没有一分钟的延迟。
什么会使 Application_Start 而不是 运行?
我发现了问题。为我的新服务提供服务的新 IIS 站点有一个默认为 .NET Framework v2 而不是 v4 的应用程序池。当我将应用程序池更新到 v4 时,该服务开始工作。
我正在构建一个新的 WebAPI 服务。到目前为止,它有一个端点调用我的逻辑项目中的方法,该方法调用我的 EF 存储库项目中的方法。当我在 Visual Studio 中的 IIS Express 中 运行 它时,它起作用了。当我将它发布到 IIS 站点 (IIS 7.5) 时,我收到 404 Not Found 并且看起来好像 application_start 从来没有 运行s。我将代码添加到 application_start 以抛出异常,但我从未看到该异常,只有 404 Not Found。 我在 Visual Studio 2015 年创建了该服务。我使用了 ASP.NET Web 应用程序 (.NET Framework) 项目类型。在 selection 之后的对话框中,我选择了空模板和 select 复选框来为 Web API 添加文件夹和核心引用。基于这些 selection,该项目安装了以下 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) 语句。 运行 在 IIS Express 中 Visual Studio,我可以看到一分钟的延迟。当部署到 IIS 时,它立即失败并显示 404 - 没有一分钟的延迟。
什么会使 Application_Start 而不是 运行?
我发现了问题。为我的新服务提供服务的新 IIS 站点有一个默认为 .NET Framework v2 而不是 v4 的应用程序池。当我将应用程序池更新到 v4 时,该服务开始工作。