Kie*_*Chu 9 c# asp.net iis asp.net-mvc asp.net-web-api
我有一个ASP.NET MVC项目需要托管在两个不同的服务器上.我知道这看起来很奇怪,但这是我客户的要求.
详细说来,我将有2个负载平衡服务器
我正在考虑创建另一个层(ASP.NET Web API),以便Web服务器仅提供HTML页面,应用服务器将包含业务逻辑并公开要调用的所有客户端(Web,移动)的端点.Web Server将通过RESTFUL服务与App Server通信.
还有更好的方法吗?任何解决方案将不胜感激.
提前致谢,
这是一种相当正常的做事方式 - 让Web服务器专注于提供服务页面,让后端服务器使用应用程序业务逻辑进行艰苦的工作.如果它大量使用大数据吞吐量,我会考虑使用单独的Web,应用程序和数据库服务器制作三层.
Web API也是两个服务器之间通信的不错选择,但如果您发现需要超越基本的REST操作,则可能值得考虑将WCF作为替代方案.让它运行起来是一个更大的开销,而且绝对不适合胆小的人!
编辑
因此,您需要做的是将所有当前业务逻辑从现有控制器中移出,并放入将位于第二台服务器上的相应Web API控制器集中.如果您小心,您应该能够将MVC控制器方法直接复制到Web API控制器中并添加适当的路由属性.您的数据库(如果有的话)也需要坐在第二台服务器上.
完成后,所有MVC控制器都会调用第二台服务器上运行的Web API.除了基本的调整之外,MVC控制器不应对您的数据进行任何处理,以使其看起来很好(保持控制器清洁无论如何都是好的做法).
这应该让您基本了解您需要做什么.如果您需要更具体的任何步骤,请大声说,我会看看我是否可以详细说明.
我们在我们的项目中使用了类似的结构。服务层公开了多个网站和移动应用程序正在使用的 REST API。这种架构的美妙之处在于所有业务复杂性都隐藏在 API 之后,而前端主要处理表示需求。
但是在开发这个架构时你需要注意两件事:
1. 保护端点 (REST API) - 如果您计划开发将使用 API 的移动应用程序,那么您必须通过防火墙公开端点并使互联网可以访问。一种选择是使用不记名令牌验证来验证请求。您可以使用 Oauth 协议来保护端点。
2. 序列化和反序列化的挑战:由于 REST 使用 JSON 作为数据传输的标准格式,并且 Json 不是强类型的,因此挑战是将数据映射到两端的适当模型。为了解决这个问题,我们为模型创建了一个通用项目,并将其添加到(api 和 web)项目中。当在 API 端我们对模型进行序列化时,我们将其反序列化为 Web 项目中的相同模型。他们完美地映射,没有打嗝。
希望以上提示能帮到你。
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |