gpt4 book ai didi

visual-studio-2010 - 将 ASP.NET MVC 2 部署到面向 .NET 3.5 的 IIS 7.5

转载 作者:行者123 更新时间:2023-12-04 19:57:12 27 4
gpt4 key购买 nike

我在 Visual Studio 2008 中创建了一个 ASP.NET MVC 2 应用程序。我将发布版本设置为通过 ASP.NET 编译器来预编译所有 View 、缩小 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 中仍然有无扩展处理程序,但是现在当我导航到应用程序的根目录时,它会进行目录浏览,并且它以前处理的任何路由现在都返回为 404 错误,由 IIS 中的 StaticFile 处理程序处理.我对发生的变化并导致中断感到茫然。

我看过this question ,但我已经验证所有必备组件都已安装。

最佳答案

您是否尝试使用 Phil Haack route debugger 调试您的路由?在服务器上?

编辑:
在 IIS 7.5 上,您不需要任何特殊的无扩展处理程序,这是自动处理的,您无需更改任何内容。据我所知,只有在 IIS 6 上才有必要。
这可能是问题吗?如果你删除那个特殊的处理程序怎么办?也许这就是阻止它启动路由引擎的原因。

编辑:
我仔细检查了一下,正如我所想的那样,从 IIS7 开始,AppDomain 的默认模式是 集成模式 .这意味着 Asp.net 堆栈在每次请求时都会启动,而在经典模式下,仅在调用特定扩展时才调用 asp.net(aspx ashx axd 默认映射到 aspnet_isapi 过滤器)。
UrlRoutingModule 在不需要你提供任何东西的情况下,在每一个请求中启动,因为它是一个 HttpModule 而不是一个处理程序。 (它只需要在您的应用程序的配置文件中注册,无需将其映射到扩展名,但默认情况下这是在 MVC 应用程序中。您可以打开您的 Web.Config 文件并验证您是否在一个节点下

<modules runAllManagedModulesForAllRequests ="true">
...
<add name="UrlRoutingModule" type=.../>
</modules>

您确定将 MVC 程序集部署到服务器吗?
检查 System.Web.Mvc、System.Web.Routing 和 System.Web.Abstraction 引用是否将 Copy Local 属性设置为 true,以确保您在本地和生产服务器上使用相同的程序集...

如果所有这些都是正确的,我不知道如何帮助你更多......我希望这会帮助你,或者至少让你走上正确的轨道。

编辑:
哇...请阅读您的最后一条评论...抱歉,我错过了有关经典模式的元素。你的标题提到了 IIS7.5,我假设的东西太多了。这就是为什么我感到困惑。

老实说,我现在不得不看史蒂文桑德森的书。他有一个用于对 IIS6 部署进行故障排除的 list 。
我知道你是说只有在使用 MSBuild 4 时它才会失败,但它可能仍然有用

检查 Default.aspx 是否设置为默认内容页面。这可能是 404 的来源。

然后为了拥有无扩展名的 url,上次我部署到 IIS6 时,我使用了一个简单的通配符映射,我从来没有遇到过问题......
如果你仍然遇到麻烦很抱歉我帮不上忙...不是我没有尝试:)祝你好运

关于visual-studio-2010 - 将 ASP.NET MVC 2 部署到面向 .NET 3.5 的 IIS 7.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com