在两个物理服务器中托管ASP.NET MVC项目

时间:2015-12-08 09:34:12

标签: c# asp.net asp.net-mvc iis asp.net-web-api

我有一个 ASP.NET MVC项目需要托管在两个不同的服务器上。我知道这看起来很奇怪,但这是我客户的要求。

详细说明,我将有2个负载平衡服务器

  • Web服务器 - 向公众公开(域名将指向此服务器的公共IP)
  • App Server - 与内部基础架构(Active Directory,数据库,安全性等)进行通信

Simple diagram

我正在考虑创建另一个图层(ASP.NET Web API),以便网络服务器只提供HTML页面,应用服务器将包含业务逻辑并为所有人公开端点客户(网络,移动)来电话。 Web Server将通过RESTFUL服务与App Server通信。

还有更好的方法吗?任何解决方案都将不胜感激。

提前致谢,

2 个答案:

答案 0 :(得分:5)

这是一种相当正常的做事方式 - 让Web服务器专注于提供服务页面,让后端服务器使用应用程序业务逻辑进行艰苦的工作。如果它大量使用大数据吞吐量,我会考虑使用单独的Web,应用程序和数据库服务器制作三层。

Web API也是两个服务器之间通信的不错选择,但如果您发现需要超越基本的REST操作,则可能值得考虑使用WCF。虽然让它运行起来的开销更大,但绝对不适合那些胆小的人!

修改

因此,您需要做的是将所有当前的业务逻辑从现有的控制器中移出,并放入将位于第二台服务器上的相应Web API控制器集中。如果您非常小心,您应该能够将MVC控制器方法直接复制到Web API控制器中并添加适当的路由属性。您的数据库(如果有的话)也需要坐在第二台服务器上。

完成此操作后,所有MVC控制器都会调用第二台服务器上运行的Web API。除了基本的调整之外,MVC控制器不应对您的数据进行任何类型的处理,以使其看起来很好(保持控制器清洁无论如何都是好的做法)。

这应该让您基本了解您需要做什么。如果你需要更具体的任何步骤,请大声喊叫,我会看看我是否可以详细说明。

答案 1 :(得分:4)

我们在项目中使用了类似的结构。服务层正在公开REST API,这些REST API由多个网站和移动应用程序使用。这种架构的优点在于所有业务复杂性都隐藏在API背后,而前端主要处理演示需求。

但是在开发这种架构时你需要注意两件事:

<强> 1。保护端点(REST API) - 如果您计划开发将使用API​​的移动应用程序,则必须通过防火墙公开端点并使Internet可访问。其中一个选择是使用承载令牌验证来验证请求。您可以使用Oauth协议来保护端点。

<强> 2。序列化和反序列化的挑战:由于REST使用JSON作为数据传输的标准格式,而Json没有强类型,因此面临的挑战是将数据映射到两端的适当模型。为了解决这个问题,我们为模型创建了一个通用项目,并添加到(api和web)项目中。在API结束时,我们为一个模型提供了服务,我们将它在Web项目中将其保存到同一模型中。他们完美地绘制而没有打嗝。

希望上面的提示对您有所帮助。

相关问题