54

显然我遗漏了一些东西,我无法在 IIS 7 上的 Windows Small Business Server 2008 上部署简单的 ASP.NET MVC 4、.NET 4.5 应用程序。

.NET 框架 4.5 已安装。

我应该在应用程序的应用程序池基本设置中看到该版本(4.5)吗?这个时候,我只有2.0和4.0,因为4.5就像3.5一样,只是在4.0框架之上添加的,我想这是正常的。

当我浏览主页时,出现以下错误:

403 - 禁止:访问被拒绝。您无权使用您提供的凭据查看此目录或页面。

当我请求唯一一个名为 Page /page/index 的控制器时,我得到了 404 not found 页面。就像 ASP.NET 进程永远不会得到 http 请求。

我可以请求一个简单的 HTML 页面。

应用程序池设置为 .NET 4.0 并集成为托管管道模式。

NETWORK SERVICE 对目录具有读/写权限。

当然,该应用程序从 VS2012 完美运行。

我对这里不正确的地方一无所知,搜索引擎查询也没有多大帮助。

有没有人有提示,那将非常感激。谢谢

编辑

dll 已经在 bin 文件夹中,例如 System.Web.Mvc、System.Web.Razor 等。

我创建了一个空的 test.aspx 页面,以确保 asp.net 工作进程正在获取请求,是的,页面正常。因此,尽管我的 ASP.NET MVC 3 Web 应用程序在该服务器上运行良好,但 MVC 路由似乎无法正常工作。

.NET 4.5 安装后,我做了一个 aspnet_regiis -iru 以防万一,在应用程序上添加了一个 aspnet_client 文件夹,但这仍然不能解决问题。

匿名身份验证在 IIS 身份验证部分启用,并且授权显示允许所有用户。

ASP.NET MVC 4 已安装,我刚刚进行了修复以确保。

即使安装了 ASP.NET MVC 4,标准 IIS 会返回来自请求 /page/index 操作的 404 错误,而不是标准的 aspnet 错误。所以确实看起来MVC 4框架没有正确安装,我只是仔细检查并进行修复。我在哪里可以继续调查?

@Mystere Man,我已将匿名身份验证更改为使用应用程序池身份,停止,启动应用程序,但仍然出现相同的错误。看起来,如果 ASP.NET MVC 4 没有接受请求。

这是 web.config 的一部分:

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <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="*" 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="*" 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="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>

编辑 2012/09/27

我重新配对了 Microsoft Framework .NET 4.5 并修复了 ASP.NET MVC 4,重新部署了简单的 ASP.NET MVC 4 应用程序,我仍然得到相同的行为。我不确定下一步该怎么做,所以我开始了赏金,希望有人可以帮助我找到问题。

编辑 2014/01/31

当我问这个问题时,我将 runAllManagedModulesForAllRequests 标记为已接受的答案,因为它确实解决了问题。但我肯定不会在生产中使用它。我问为什么我必须这样做,但没有任何答案。

Martin Hollingsworth的答案确实是我想要的,这是解决此问题的好方法,而不会出现与 runAllManagedModulesForAllRequests 相关的所有性能问题。

我们几乎放弃并购买了新的 Windows 2012 服务器(ASP.NET MVC 应用程序在该服务器上按原样工作)。在尝试了 Martin 的解决方案后,Windows 2008 服务器工作了。

4

9 回答 9

46

尝试使用这个:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>

编辑:

上面的解决方案适用于 .NET 3.5 或更低版本。如果您使用的是 .NET 4.0 或更高版本,您可能需要尝试安装 IIS7 QFE

此外,这篇文章值得一读,以了解这两者之间的区别。

于 2012-09-29T13:54:06.943 回答
45

如果您无法从 kb 980368应用QFE,而不是按照接受的答案中的建议使用runAllManagedModulesForAllRequests解决方案,您应该使用下面显示的带有preCondition=""的模块配置,以避免对静态内容产生负面影响,如中所述博客文章asp.NET MVC 路由的工作原理及其对静态请求性能的影响以及在使 MVC 路由正常工作时不要使用 runAllManagedModulesForAllRequests="true"以及对答案的一些评论。

Scott Hanselman 关于 runAllManagedModulesForAllRequests 的博客文章应该为这个论点增加一些分量。Rick Strahl 的帖子警告与 IIS 7/8中的 runAllManagedModulesForAllRequests 是我发现的设置之间交互的最佳解释。关于模块 preCondition 属性的 IIS 文档也值得一读。

请记住,如果您已应用 QFE,则无需更改此配置,因为此行为已成为默认行为。

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>
于 2013-05-16T01:38:51.870 回答
9

我有一个类似的问题。我尝试了此处描述的许多解决方案(Web.Config system.webServer 配置条目等),但均无济于事。最后,我发现了我的特定安装的问题所在。我将我的网站发布到本地文件系统,然后将这些文件复制到服务器上。事实证明,文件 Global.asax 不是已发布文件的一部分。一旦我复制了该文件,错误就消失了。

于 2013-05-02T18:02:44.963 回答
2

根据https://stackoverflow.com/a/12521807/695829

我有同样的问题,这个修补程序修复了它::http: //support.microsoft.com/kb/980368

于 2013-05-01T01:51:07.370 回答
1

如 SonicTheLichen 所述,如果您从 Visual Studio 发布,则默认情况下不会复制 gloabal.asax 文件。通过将 global.asax 复制到您的网络服务器应该可以解决问题。感谢 SonicTheLichen 提供解决方案。

问候, 索拉布

于 2014-04-23T18:13:28.507 回答
0

我不知道这是否会解决您的问题,但它解决了我已将 MVC 应用程序部署到 IIS 的问题。

我必须为应用程序的主/虚拟目录添加一个通配符应用程序映射到 aspnet_isapi.dll。您可以通过右键单击网站/虚拟目录并选择主目录/虚拟目录选项卡,单击配置按钮,然后单击通配符应用程序映射部分下的插入按钮来执行此操作。

C:\WINDOWS\microsoft.net\Framework64\v4.0.30319\aspnet_isapi.dll

祝你好运!

于 2012-10-04T13:41:00.540 回答
0

我有一个类似的问题。我不得不将 .net MVC 站点部署到安装了 Windows 2008 和 IIS 7.5 的新服务器上。当我检查程序和功能时,我看到只安装了 .Net Framework 4.5.1。我手动启用了 .Net 3.5.1 Windows 功能。安装 MVC 4.0 后,路由不起作用。

我的解决方案:
1)卸载 .Net 4.5.1 框架和 MVC 4.0
2)安装 .Net Framework 4.0
3)安装 .Net 框架 4.5.1
4)安装 MVC 4.0

于 2014-07-31T05:44:56.347 回答
0

我知道这已经过时了,但是 Windows 更新刚刚浪费了我几个小时:

如果您在 Global.asax 中处理您的异常,这也可以很简单,因为保持 Windows 更新与您的开发环境相同......对我来说,我显然没有这样做,这导致“无法加载......”异常,我的 global.asax 试图处理它,然后又遇到了同样的问题,但隐藏了潜在的问题.....

于 2015-04-02T20:57:06.507 回答
0

我必须在 IIS 网站属性的处理程序映射部分启用脚本。

处理程序映射

打开 IIS,单击有问题的网站。打开处理程序映射并单击“编辑功能权限”。选中脚本和执行框,然后单击确定。好走!

于 2016-12-01T21:06:47.870 回答