ASP.Net MVC 3/4 托管在 IIS 7.5 默认处理程序映射上

Posted

技术标签:

【中文标题】ASP.Net MVC 3/4 托管在 IIS 7.5 默认处理程序映射上【英文标题】:ASP.Net MVC 3/4 Hosted on IIS 7.5 Default Handler Mappings 【发布时间】:2012-08-12 15:58:42 【问题描述】:

在 Windows 7 (PRO) 上托管在 IIS 7.5 .Net Framework 4.0 上的 ASP.Net、ASP.Net MVC 和 WCF 服务的正确默认处理程序映射是什么?

在安装 ASP.Net MVC 3/4 的 8 名开发人员团队中,只有 1 名开发人员可以在 IIS 7.5 的默认网站下运行基本的 ASP.Net MVC 3 Internet 应用程序,而无需更改处理程序映射,没有团队的成员可以获得具有相同站点的第二个网站,以与位于根网站子目录中的站点目录一起工作。 inetpub/wwwroot/site

以下是 IIS 7.5 中设置的三个 Handler Mappings,它们都是不同的,并且没有被开发人员更改。

将所需设置定义为默认值并确保所有工作站应用相同配置而不在网站 Web.Config 文件中设置它们的最佳方式是什么?

【问题讨论】:

在将 IIS 添加为 Windows 的功能之前,他们有没有机会安装 Visual Studio?如果是这样,请尝试运行 aspnet_regiis -i 以查看它是否为每个人提供了更一致的映射。 (见msdn.microsoft.com/en-us/library/k6h9cz8h(v=vs.100).aspx) @OdeToCode 我们已经在所有工作站上运行了 aspnet_regiis -i 和 -ir,但我们仍然没有配置正确的处理程序映射。 您上面的图片中的处理程序映射是在根(服务器)级别,还是偶然在网站级别?如果后者(并假设父级处理程序是正确的),您可以尝试单击处理程序映射屏幕上操作下的“恢复为父级”链接。 @chuex 他们在根级别,但是很好的评论,因为这是一个常见的问题。 【参考方案1】:

我成功地将 MVC 4 部署到我的本地 IIS 7.5(Windows 7)。这解决了我的问题(如提到的here)

(对于 x64 系统)

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

(或者如果你在 32 位系统中)

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

另外,我将 DefaultAppPool 更改为使用 v4-Integrated(从 v2-Classic),将网站转换为应用程序,并让应用程序使用 DefaultAppPool。

这是我完整的 Web.config。它包含处理程序。

<?xml version="1.0" encoding="utf-8"?>

<compilation targetFramework="4.0" />

<pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
  </namespaces>
</pages>

<modules runAllManagedModulesForAllRequests="true" />

<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

【讨论】:

【参考方案2】:

假设您的默认网站已配置为 IIS 中的应用程序,则此问题的最可能原因是应用程序池运行经典管​​道而不是集成管道。在我们部署到 Azure、本地 IIS 服务器和开发机器的所有 MVC 应用程序中,我们不必接触处理程序映射,除非必须欺骗 IIS 6 来托管 MVC 站点。

检查应用程序池管道:

    打开 IIS 管理器

    右键单击默认网站,然后选择高级设置。这将打开一个窗口

    记下应用程序池的名称。现在,关闭此窗口并单击 IIS 管理器左侧菜单中的应用程序池

    如果托管管道模式未设置为集成(例如正在阅读经典),则右键单击应用程序池并选择基本设置。从这里,您可以更改管道类型。选择集成。

5.应用程序池应该立即重新启动,但您可以选择手动重新启动它或 IIS 以确保您的更改已经生效。

注意 - 如果您正在运行 IIS 6,here is a link 描述了如何调整处理程序映射以便 IIS 6 可以运行 MVC 站点。

附录 - 如果您一直在处理处理程序映射,根据已更改的内容,您可能希望在干净的 IIS 安装上尝试此操作。当您的团队试图使 MVC 部署工作时,不清楚哪些处理程序配置错误。

【讨论】:

没有全部设置为集成管道。这些是干净的 IIS 安装,然后安装 VS 2010、MVC 3 和 MVC。似乎从来没有一套通用的映射。

以上是关于ASP.Net MVC 3/4 托管在 IIS 7.5 默认处理程序映射上的主要内容,如果未能解决你的问题,请参考以下文章

IIS 7.5 上的 ASP.NET MVC

IIS 7.5 上的 ASP.NET MVC

部署 ASP.Net MVC 2.0 应用程序 IIS 7.0

Win7 下IIS(7.5)发布 ASP.NET MVC

HTTP 错误 403.14 - 禁止 asp.net 5 和 MVC 6 iis10

IIS 7.5 中的 Asp.net mvc 4 应用程序问题