在现有WCF应用程序(IIS)中托管ASP.net MVC 4站点

时间:2014-07-11 12:21:44

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

我的公司使用.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的子路由方式?

2 个答案:

答案 0 :(得分:0)

这种方法听起来会让你和你的公司出现比它更值得的问题。 我看到你提到将它分成两个独立的组件是不可能的,但我会考虑它有几个原因。

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

  2. 路由 WCF不了解路由,它只有一个错误的入口点。决定将其称为嵌入在消息的有效载荷中的方法。 另一方面,MVC基于URL进行路由。

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

  4. 这些只是我头脑中的一些。它似乎过于复杂,并且 hacky 这样做。 我考虑在IIS中单独托管两个应用程序,并将通用逻辑提取到允许重用的公共类库中。

答案 1 :(得分:0)

我建议你仔细阅读WCF Services and ASP.NET

您将发现让WCF在 IIS和ASP.NET之间非常困难(或至少是开拓性的)。它们旨在并排或独立工作。

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

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