0

我有一个跨三个负载平衡服务器运行的 MVC 3 站点。在其中一台服务器上,此链接:

 @Html.ActionLink("Admin", "Index", new { area = "Admin", controller = "Home" })

被正确渲染。

http://my1.mvcsite.com/Admin/Home

在另外两个上,URL 出现错误。

http://my2.mvcsite.com/?area=Admin

所有服务器都没有安装 MVC 3,所以当我推送更改时,我会包含可部署的程序集。我知道路由没有问题,因为在其他地方我使用的是相当复杂的路由,并且这些路由在所有三台服务器上都可以正常工作。在浏览器中手动输入路由也可以正常工作,但不适用于两个流氓服务器上的区域。

问题似乎是其中两个服务器对区域一无所知,这似乎很奇怪。有没有其他人遇到过这样的问题,如果有,他们做了什么来解决这个问题?

编辑

这三台服务器都是 Windows Server 2008 R2 DataCentre 并运行 IIS7

4

1 回答 1

1

我和一位同事通过从两台流氓服务器的临时 ASP.NET 文件中删除此文件来解决此问题。

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>

这感觉有点不对,因为我不确定为什么会发生这种情况。但是在我的头撞到砖墙上两天之后,它就可以了。

这篇文章似乎表明我发现的是 MVC 的一个错误。我不知道问题是否仅与 MVC 3 有关。

编辑

刚刚发现这个链接表明 MVC 4 可能存在问题

于 2013-10-04T15:48:59.437 回答