显然,我遗漏了一些东西,我无法在.NET 7上的Windows Server2008上部署一个简单的WindowsMVC4,IIS4.5应用程序。
已安装.NET Framework4.5。
我是否应该在应用程序的应用程序池基本设置中看到该版本(4.5)?在这个时候,我只有2.0和4.0,因为4.5就像3.5,它只是在4.0框架之上添加,我想这是正常的。
当我浏览主页时,我得到了以下错误:
403 -禁止:访问被拒绝。您没有使用您提供的凭据查看此目录或页面的权限。
当我请求名为page / Page /index的唯一控制器时,我得到了404not found页面。例如,ASP.NET进程永远不会收到http请求。
我可以请求一个简单的HTML页面。
应用程序池设置为.NET 4.0,并作为托管管道模式集成。
网络服务对该目录具有读/写访问权限。
当然,这款应用在VS2012上运行得天衣无缝。
我对这里不正确的地方一无所知,搜索引擎查询也没有多大帮助。
有没有人能给点提示,我会非常感激的。谢谢
编辑
dlls已经在System.Web.Mvc、System.Web.Razor等bin文件夹中。
我创建了一个空的test.aspx页面,以确保asp.net工作进程正在接收请求,是的,该页面是正常的。所以看起来MVC路由不工作,尽管我有ASP.NET mvc3web应用程序在该服务器上工作正常。
在.NET 4.5安装之后,我做了一个aspnet_regiis -iru以防万一,在应用程序上添加了一个aspnet_client文件夹,但这仍然不能解决问题。
在IIS身份验证部分启用匿名身份验证,并对所有用户显示允许身份验证。
安装了ASP.NET MVC4,我刚刚做了一次修复以确保。
即使安装了IISMVC4,请求/page/index操作产生的404错误也是由标准ASP.NET返回的,而不是标准的ASP.NET错误。因此,看起来MVC4框架确实没有正确安装,我只是再次检查并进行了修复。我可以在哪里继续调查?
@Mystere Man,我已经将匿名身份验证更改为使用应用程序池身份,停止,启动应用程序,但仍然是相同的错误。如果ASP.NET MVC4不接受请求,看起来真的很像。
下面是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
我重新配对了微软框架MVC4.5并修复了ASP.NET .NET 4,重新部署了简单的ASP.NET MVC4应用程序,但我仍然得到了相同的行为。我不确定下一步该做什么,所以我发起了一次赏金,希望有人能帮我找到问题所在。
编辑2014/01/31
当我问这个问题时,我将runAllManagedModulesForAllRequests标记为可接受的答案,因为它确实解决了问题。但我肯定不会在生产中使用它。我问为什么我必须这样做,但没有任何答案。
Than Martin Hollingsworth answer确实是我正在寻找的,一个解决这个问题的好方法,而不是所有与runAllManagedModulesForAllRequests相关的性能问题。
我们几乎放弃了,买了一台新的Windows2012服务器( ASP.NET MVC应用程序就是从这台服务器上运行的)。在尝试了Martin的解决方案之后,Windows2008服务器开始工作了。
发布于 2013-05-16 09:38:52
如果您不能应用QFE from kb 980368,而不是使用接受的answer中建议的runAllManagedModulesForAllRequests解决方案,您应该使用下面显示的带有preCondition="“的模块配置,以避免对静态内容的负面影响,如博客帖子How asp.NET MVC Routing Works and its Impact on the Performance of Static Requests和Don't use runAllManagedModulesForAllRequests="true" when getting your MVC routing to work以及对答案的一些评论中所述。
Scott Hanselman's blog post about runAllManagedModulesForAllRequests应该给这个论点增加一些分量。Rick Strahl's post Caveats with the runAllManagedModulesForAllRequests in IIS 7/8是我找到的关于设置之间交互的最好解释。module preCondition attribute上的IIS文档也值得一读。
请记住,如果您已应用QFE,则此配置更改不是必需的,因为此行为已成为默认行为。
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
发布于 2012-09-29 21:54:07
尝试使用以下命令:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>
编辑:
上面的解决方案适用于.NET 3.5或更低版本。如果您使用的是.NET 4.0或更高版本,则可能需要尝试使用installing IIS7 QFE
此外,为了理解这两者之间的区别,this article值得一读。
发布于 2013-05-03 02:02:45
我也遇到过类似的问题。我尝试了这里描述的许多解决方案( Web.Config system.webServer配置条目等),但都无济于事。最后,我发现了我的特定安装的问题所在。我将我的网站发布到本地文件系统,然后将这些文件复制到服务器上。事实证明,文件Global.asax不是已发布文件的一部分。一旦我复制了那个文件,错误就消失了。
https://stackoverflow.com/questions/12495346
复制相似问题