Age*_*191 5 visual-studio-2010 iis-7.5 asp.net-mvc-2
我在Visual Studio 2008中创建了一个ASP.NET MVC 2应用程序.我将发布版本设置为通过ASP.NET编译器预编译所有视图,缩小Javascript和CSS,清理web.config等.自生产以来部署将转到IIS6服务器,我在Windows 7计算机上设置了伪生产部署,以使应用程序池以经典模式运行,目标是2.0运行时.我在web.config中设置了无扩展处理程序,这是必要的,一切都很好.
问题出现在我将解决方案升级到Visual Studio 2010时. 我仍然以3.5框架为目标,但现在我正在使用MSBuild 4.0,因为这是Visual Studio 2010使用的.一切仍然正确编译,因为它在Cassini下运行正常,但是当我将它部署到同一位置(相同的应用程序池,身份等)时,它现在表现不同.我仍然在web.config中有无扩展名处理程序,但是现在当我导航到应用程序的根目录时它会进行目录浏览,而现在处理的任何路由现在都会返回,因为IIS中的StaticFile处理程序正在处理404错误.我不知道改变了什么,导致了休息.
我已经看过这个问题,但我已经验证了所有必备组件都已安装.
您是否尝试使用服务器上的Phil Haack 路由调试器来调试路由?
编辑:
在 IIS 7.5 上,您不需要任何特殊的无扩展处理程序,这是自动处理的,您不需要更改任何内容。据我所知,只有 IIS 6 才有必要。这可能是问题所在吗?如果删除那个特殊处理程序会怎么样?也许这就是阻止它启动路由引擎的原因。
编辑:
我仔细检查了,正如我所想,从 IIS7 开始, AppDomain 的默认模式是Integrated Mode。这意味着 Asp.net 堆栈会在每次请求时启动,而在经典模式下,仅当调用特定扩展时才会调用 asp.net(aspx ashx axd 默认情况下映射到 aspnet_isapi 过滤器)。
UrlRoutingModule会在每个请求时启动,而不需要您提供任何内容,因为它是 HttpModule 而不是 Handler。(它只需要在应用程序的配置文件中注册,无需将其映射到扩展名,但默认情况下这是在 MVC 应用程序中。您可以打开 Web.Config 文件并验证您是否已在一个节点
<modules runAllManagedModulesForAllRequests ="true">
...
<add name="UrlRoutingModule" type=.../>
</modules>
Run Code Online (Sandbox Code Playgroud)
您确定将 MVC 程序集部署到服务器吗?检查System.Web.Mvc、System.Web.Routing和System.Web.Abstraction引用是否将 Copy Local 属性设置为 true,以确保您在本地和生产服务器上使用相同的程序集...
如果所有这些都是正确的,我不知道如何为您提供更多帮助...我希望这会帮助您,或者至少让您走上正确的轨道。
编辑: 哇...刚刚阅读您的最后评论...抱歉我错过了有关经典模式的元素。你的标题提到了IIS7.5,我假设了太多的事情。这就是我感到困惑的原因。
老实说,我现在必须看看史蒂文·桑德森的书。他有一份用于排除 IIS6 部署故障的清单。我知道您是说只有在使用 MSBuild 4 时才会失败,但它可能仍然有用
检查 Default.aspx 是否设置为默认内容页。这可能是 404 的来源。
然后为了拥有无扩展名的网址,上次我部署到 IIS6 时,我使用了一个简单的通配符映射,并且从未遇到过问题...如果您仍然遇到麻烦,抱歉我无能为力...并不是我没有尝试: ) 祝你好运
| 归档时间: |
|
| 查看次数: |
11036 次 |
| 最近记录: |