我有一个运行在三个负载均衡服务器上的MVC 3站点。在其中一个服务器上链接:
@Html.ActionLink("Admin", "Index", new { area = "Admin", controller = "Home" })
正确呈现。
http://my1.mvcsite.com/Admin/Home
另外两个网址出错了。
http://my2.mvcsite.com/?area=Admin
没有任何服务器安装了MVC 3,因此当我推送更改时,我包含可部署的程序集。我知道这不是路由的问题,因为在其他地方我使用相当复杂的路由,这些在所有三个服务器上都可以正常工作。手动键入路由到浏览器也可以,但不适用于两个流氓服务器上的区域。
问题似乎是两个服务器对Area一无所知,这看起来很奇怪。有没有其他人遇到这样的问题,如果是这样,他们做了什么来解决这个问题?
修改
所有三台服务器都是Windows Server 2008 R2 DataCentre并运行IIS7
答案 0 :(得分:1)
我和一位同事通过从两个流氓服务器的Temporary ASP.NET Files中删除此文件来解决此问题。
MVC-AreaRegistrationTypeCache.xml
在这里找到:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\06304885\908d56a6\UserCache
在未映射区域的服务器上,也未找到XML,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!--This file is automatically generated. Please do not modify the contents of this file.-->
<typeCache mvcVersionId="3cff62e5-ef21-4e58-897f-d0f1eafd3beb" lastModified="10/09/2013 15:10:21"/>
删除此文件并重新启动应用程序池会导致重新创建该文件,然后区域可以正常工作。
该文件现在是:
<?xml version="1.0" encoding="utf-8"?>
<!--This file is automatically generated. Please do not modify the contents of this file.-->
<typeCache lastModified="04/10/2013 15:45:02" mvcVersionId="3cff62e5-ef21-4e58-897f-d0f1eafd3beb">
<assembly name="MyMVCSite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<module versionId="a3ce0d47-e370-4176-a07b-76aec3a3c25c">
<type>MyMVCSite.Areas.Admin.AdminAreaRegistration</type>
</module>
这有些不对,因为我不确定为什么会这样;但是,经过两天的撞击砖墙,我会做的。
This article seems to suggest that what I've found is a bug with MVC.我不知道问题是否只适用于MVC 3.
修改强>
Just found this link that suggests there might be a problem with MVC 4