【问题标题】:Can I host two MVC3 applications next to each other?我可以同时托管两个 MVC3 应用程序吗?
【发布时间】:2011-12-21 20:30:47
【问题描述】:

我可以在 ~/priv/ 中拥有一个 MVC3 应用程序,而在 ~/pub 中拥有另一个应用程序吗?

似乎如果我首先将应用程序放在 ~/priv/ 中,然后当我转到“XXX.XXXXX.com/”时,它会为 ~/priv 中的应用程序提供服务。我可以用路线解决这个问题吗?有什么我想念的吗?请帮忙!

编辑: 需要明确的是,有没有一种方法可以使结构看起来像:

[root]
  [priv]
  [pub]

因此,如果有人进入 root,则任何人都不会被看到,如果有人进入 root/priv,他们会看到 priv 应用程序,如果有人进入 root/pub,他们会得到 pub 应用程序。

【问题讨论】:

  • 为什么要将虚拟目录/应用程序相互嵌套?
  • 一个是专有应用程序,另一个是公共领域。它们不必嵌套。一个可能在 ~/pub/ 中,另一个可能在 ~/priv/ 中。唯一的问题是他们都会试图接管 ~/.有没有办法防止这种情况发生?

标签: asp.net asp.net-mvc-3 iis-7


【解决方案1】:

您可以在一个站点下创建多个应用程序,并让它们使用不同的别名。

在 IIS 管理器中创建一个新网站。 右键单击该网站,然后选择“添加应用程序...”并给出别名“priv”,然后为您的其他“pub”网站重复该过程。

然后您可以通过 XXX.XXXXX.com/priv/mycontoller/myaction 访问预测站点,另一个通过 XXX.XXXXX.com/pub/mycontoller/myaction 访问。

我想您需要在 IIS 中为此创建一个新站点,而不是仅仅将应用程序添加到现有的 ASP.Net MVC 站点 - 我想这会混淆路由。

【讨论】:

  • 确保不要将您的任何一个应用程序部署到您网站的根目录,一切都会正常工作。正如 StanK 所描述的,创建您的根站点,然后在站点内创建单独的“应用程序”。
  • 我无法访问 IIS 管理器,此站点是通过托管公司托管的。
【解决方案2】:

您需要确保几件事:

  • 虚拟目录 [pub] 和 [priv] 必须每个 配置为 IIS 中的应用程序。
  • 如果 [root] 配置为应用程序,则子文件夹中的任何应用程序都将从 web.config 继承值,即使它们在不同的应用程序池下运行。确保这不会导致冲突或意外行为。
  • 检查设置runAllManagedModulesForAllRequests=true。如果 [root] 被配置为应用程序,它可能会在 IIS 到达子应用程序之前拦截来自 IIS 的调用。您可能希望将以下内容添加到 [root] 的 web.config(但请确保在 [pub] 和 [priv] 中覆盖此内容:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
        <modules runAllManagedModulesForAllRequests="false">
                <remove name="UrlRoutingModule-4.0" />
            </modules>
        </system.webServer>
    </configuration>
    
  • 然后,在 [pub] 和 [priv] 的 web.config 中,您可以添加:

    <modules runAllManagedModulesForAllRequests="true">
        <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
    </modules>
    

【讨论】:

  • root 是空的,其中没有文件,尽管提供者可能将其定义为我无权访问的某个应用程序。
  • 然后你需要添加一个 web.config 到它。
  • 这是一个非常好的主意/点!您能否编辑答案以显示 web.config 文件中除了模块定义之外还需要包含哪些内容,或者仅包含模块定义的空白 web.config 是否有效?
  • @TravisJ 我更改了 root 的示例配置以显示最小的 web.config。
【解决方案3】:

您可以为每个应用程序创建子域。

【讨论】:

  • 这不是一个糟糕的解决方案,但它是唯一的方法吗?每个子域都必须有自己的主机。
  • 这取决于您的托管计划。我使用 IX,他们以非常合理的价格提供无限的子域。您可能需要咨询您的 ISP。
【解决方案4】:

如果您可以将公共和私有应用程序合并到一个 Web 应用程序中,则可以利用 Asp.net MVC 中的区域。

通过这种方式,您可以使用 Areas 或 Module 将应用程序划分为更小的分组(在您的情况下为 priv 区域和 pub 区域) 实际上,Area 是您应用程序中的完整 MVC 结构。

Grouping Controllers with ASP.NET MVC

App Areas in ASP.NET MVC, take 2

Walkthrough: Organizing an ASP.NET MVC Application using Areas

【讨论】:

  • 虽然可以将代码/内容/文件系统/完全耦合在一起的项目,但这不是我的想法。你看,这个例子很小,因为我希望能够在单独的文件夹中部署几个(如果不是很多)应用程序。我不想重新编译来添加应用程序,当然也不希望其他开发应用程序的人访问整个应用程序库的代码。
猜你喜欢
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多