【问题标题】:Host an ASP.net MVC 4 site inside existing WCF application (IIS)在现有 WCF 应用程序 (IIS) 中托管 ASP.net MVC 4 站点
【发布时间】:2014-09-02 01:43:39
【问题描述】:

我的公司提供了一个带有 .Net WCF 的大型 SOAP 应用程序。在这个现有的 WCF 应用程序中,我们现在需要托管一个 Asp.net MVC 4(或 5)网站。这意味着我们需要某种路由,将特定类型的 URI 完全重定向到 Asp-Subcomponent 并像单独的应用程序一样进行处理。

搜索此问题时,我只能找到相反的解决方案 - 确保在 Asp MVC 中向 WCF 子组件进行路由将非常简单直接。 然而,这在我们的案例中是不可能的。 WCF 包含很多我们不能(也绝对不想)转移到 Asp 组件中的安全钩子。另一方面,将其分成两个单独的应用程序并让 IIS 进行路由也是不可能的解决方案,因为我们的应用程序与我们公司的其他软件包有大量依赖关系,我们不想在单独的应用程序中维护两次.

现有的 WCF 组件作为单独的 Web 应用程序托管在带有 .NET 4.0 应用程序池的 IIS 7.5 内。

是否有任何合理的方式从 WCF 到 Asp.net MVC 的子路由?

【问题讨论】:

  • 您的 WCF 应用程序以什么形式存在?例如它是在 Windows 服务中还是在 IIS 中自托管?我怀疑你的架构描述不够清楚,无法得到答案
  • 它在 IIS 7.5 中 - 我还将它添加到我的问题文本中。如果您需要任何其他信息,请告诉我!

标签: c# asp.net asp.net-mvc wcf iis


【解决方案1】:

这种方法听起来会给您和您的公司带来比其价值更多的问题。 我看到你提到将它分成两个单独的组件是不可能的,但是出于几个原因我会考虑它。

  1. 身份验证和授权在 WCF 和 MVC 中差别很大,我会将这些代码重构为不依赖于每种技术的库,然后为每个技术编写 WCF 和 MVC 抽象应用。那就是您可以重用,但也有两个组件可以理解底层技术

  2. 路由 WCF 不理解路由,它只有一个入口点。决定调用哪个方法嵌入在消息的有效负载中。 另一方面,MVC 基于 url 路由。

  3. 部署对 MVC 站点的更新将需要 WCF 服务更新,反之亦然

这些只是我的想法。这样做似乎过于复杂和hacky。 我会考虑将两个应用程序分别托管在 IIS 中,并将公共逻辑提取到允许重用的公共类库中。

【讨论】:

    【解决方案2】:

    我建议你彻底阅读WCF Services and ASP.NET

    您会发现将 WCF 置于 IIS 和 ASP.NET 之间非常困难(或至少是开创性的)。它们被设计为并排或独立工作。

    鉴于让 WCF 和 ASP.NET/MVC 使用相同的底层身份验证系统(例如 Forms Auth)非常简单,您对正确架构它的主要反对意见似乎是“与我们的其他软件包的大量依赖项”我们不想在不同的应用程序中维护两次的公司”。

    再次解决这似乎是一个非常简单的重构。您的任务只是从业务逻辑中提取所有 WCF 特定代码,然后将业务逻辑放入单独的类库中,以便在 WCF 和 MVC 应用程序之间共享。对我来说,没有其他明智的方法可以解决您的问题。任何其他方法都可能比您目前拥有的(单片的)WCF 应用程序更加混乱。

    【讨论】:

    • 感谢您的回答,我之前也有过同样的感觉,但我希望有一个更简单的解决方案。但恐怕我们必须想办法让我们的应用共存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多