Iis 7 在IIS 7.0/Windows Server 2008上获取ASP.NET MVC 3应用程序的404.0错误
我正在尝试将ASP.NET MVC 3应用程序部署到Windows 2008 x64服务器(显然运行IIS 7.0),而IIS似乎不希望正确提供内容。所有请求都会导致404.0错误,因为请求与任何处理程序都不匹配,并且IIS正在尝试使用StaticFile处理程序来提供请求。这个问题似乎与.NET4.0有关,因为我有一个MVC2应用程序在为.NET2.0运行时配置的应用程序池中正常运行 在Windows 7和Windows Server 2008 R2上,将同一应用程序部署到IIS 7.5服务器时,我没有遇到任何问题 在部署之前,2008服务器没有安装.NET 4.0或ASP.NET MVC 3,因此以下是我在部署应用程序之前执行的步骤:Iis 7 在IIS 7.0/Windows Server 2008上获取ASP.NET MVC 3应用程序的404.0错误,iis-7,.net-4.0,asp.net-mvc-3,windows-server-2008,asp.net-4.0,Iis 7,.net 4.0,Asp.net Mvc 3,Windows Server 2008,Asp.net 4.0,我正在尝试将ASP.NET MVC 3应用程序部署到Windows 2008 x64服务器(显然运行IIS 7.0),而IIS似乎不希望正确提供内容。所有请求都会导致404.0错误,因为请求与任何处理程序都不匹配,并且IIS正在尝试使用StaticFile处理程序来提供请求。这个问题似乎与.NET4.0有关,因为我有一个MVC2应用程序在为.NET2.0运行时配置的应用程序池中正常运行 在Windows 7和Windows Server 2008 R2上,将同一应用程序部署到IIS 7.5服务器
在这一点上,我完全不明白为什么这不能正常工作。我已经能够在两个不同的IIS 7.0服务器上复制该问题。我遗漏了什么?你实际上只是提醒我需要在这里的环境中解决这个问题。如果你的情况和我的一样,那么这是一个简单的解决办法 只需将以下内容添加到web配置中:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
编辑:进一步解释手头的问题。在我的例子中,当我添加自定义路由映射时,IIS将请求视为文件夹/静态文件请求,因此跳过ASP.NET工作进程。这在开发环境下的行为通常有所不同,因为它是在开发web服务器下运行的,开发web服务器也将通过.net进程传递所有请求
此Web配置条目告诉IIS,即使IIS确定它是静态文件或文件夹,也应该在每个Web请求上运行模块 问题在于,我的代码完全依赖于仅在IIS 7.5中可用的自动启动功能。在IIS中的失败请求跟踪功能的帮助下,我发现了这个问题,现在我修改了我的global.asax.cs文件,以便无论应用程序如何/何时加载,都能正确初始化它。请确保您在IIS 7.0集成模式下运行。如果需要在IIS 7.0经典模式下运行,则需要执行多个操作以使路由正常工作。请参考以下博客帖子
如果您在IIS 7.5或更高版本上运行web应用程序,请确保已正确启用IIS的角色服务。感兴趣的角色服务有:ASP.NET、基本身份验证、HTTP重定向、ISAPI筛选器等 您可以通过添加或删除程序-打开或关闭Windows功能转到角色服务。 希望这有帮助 问候,,
Kiran Banda我的解决方案,在尝试了一切之后: 糟糕的部署,一个旧的预编译app.config挂在我的部署位置上,使一切都无法工作 我的最终设置有效:
- IIS 7.5,Win2k8r2 x64
- 集成模式应用程序池
- web.config中没有任何更改-这意味着没有用于路由的特殊处理程序。这是我的快照,有很多其他文章参考。我正在使用FluorineFX,因此我添加了该处理程序,但我不需要任何其他处理程序:
<system.web> <compilation debug="true" targetFramework="4.0" /> <authentication mode="None"/> <pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> <httpRuntime requestPathInvalidCharacters=""/> <httpModules> <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/> </httpModules> </system.web> <system.webServer> <!-- Modules for IIS 7.0 Integrated mode --> <modules> <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx" /> </modules> <!-- Disable detection of IIS 6.0 / Classic mode ASP.NET configuration --> <validation validateIntegratedModeConfiguration="false" /> </system.webServer>
- PassthroughRouteHandler.cs-这实现了从到的自动转换,然后将由default.aspx处理:
public class PassthroughRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { HttpContext.Current.Items["IncomingMessage"] = requestContext.RouteData.Values["message"]; requestContext.HttpContext.Response.Redirect("#" + HttpContext.Current.Items["IncomingMessage"], true); return null; } }
- 我也有同样的问题。我的程序集在应用程序启动时失败。我启用了Fusion日志查看器来查看哪些程序集出现故障,并找到了解决方法。我从来没有发现过这一点,因为这似乎是一个MVC路由问题,但我想我会发布这篇文章,以防其他人也在这个问题上浪费时间 首先:看一看事件查看器,您可以节省时间找到合适的解决方案。@Dario:在任何Windows日志中都没有与此问题相关的值得注意的内容。工作进程没有抛出任何异常,并且在4.0运行时之上正常运行。ASP.NET也没有抛出任何异常,因为IIS从未调用过它,因为IIS正在尝试使用StaticFile处理程序来处理请求。作为记录,我所需要的只是应用修补程序(bullet#4)。您是如何在global.asax中初始化它的?在我的global.asax.cs文件(MVCAPApplication)中定义的类实现
IProcessHostPreloadClient
以利用IIS 7.5自动启动功能。因此,我将Application\u Start
中的所有代码移动到Preload
方法。以支持自动启动的情况
public class PassthroughRouteHandler : IRouteHandler {
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
HttpContext.Current.Items["IncomingMessage"] = requestContext.RouteData.Values["message"];
requestContext.HttpContext.Response.Redirect("#" + HttpContext.Current.Items["IncomingMessage"], true);
return null;
}
}