IIS启动行为flakey(Web API)

时间:2013-05-24 13:10:28

标签: c# asp.net-mvc-4 iis-7.5

我们使用IIS构建了我们的n层应用程序,以使用Web API呈现RESTful服务。

不幸的是,当我们启动我们的应用程序视图,或者从URL运行网站时,有时它会运行,有时它会失败,并且ArugmentException指出其中一个字段为空。我们将参数异常作为保护 - 但显然类型字段在不应该出现时为空。

由于我们使用了基本的Web API模板,因此我们在Global.asax.cs中有以下行:

RouteConfig.RegisterRoutes(RouteTable.Routes);

反过来调用:

public class RouteConfig
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
      name: "Default",
      url: "{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  );
}

}`

现在要强调的是,这几乎总是在visual studio / IIS Express中运行。但是,当我们将它部署到IIS本身,或者视觉工作室环境之外的IIS Express时,它变得很好,并且不起作用 - 但是如果你继续踢它最终它会变得生动。

到目前为止,我们已经尝试过:

  • 删除我们可以找到的对ASP.NET 2.x的任何引用(所有内容都是基于.NET 4.5构建的)
  • 将以下内容添加到Web.Config: <modules runAllManagedModulesForAllRequests="true" />

欢迎任何进一步的想法 - 如果您需要任何其他代码,请告诉我,我会添加它(不知道可能需要什么)。

由于

1 个答案:

答案 0 :(得分:1)

我会尝试在IIS下运行时调试Web应用程序,这将忽略IIS Express和IIS之间的任何差异(正确)。

您可以在w3wp.exe进程运行时附加到它(Visual Studio,Debug - &gt; Attach)

调试启动代码时,您可能需要调用Debugger.Break()作为临时助手,以允许Visual Studio附加到进程。