Azure上的ASP.NET MVC:合并还是分离web角色?

Azure上的ASP.NET MVC:合并还是分离web角色?,asp.net,asp.net-mvc,angularjs,azure,Asp.net,Asp.net Mvc,Angularjs,Azure,我正在开发一个ASP.NET MVC 5 web应用程序,该应用程序托管在Azure上,目前具有以下设置: web角色1:用于UI的ASP.NET MVC项目:主要是一个带有AngularJS和bootstrap的单页应用程序 web角色2:ASP.NET MVC web Api项目:包含Api控制器,处理所有授权、数据访问(EntityFramework 6)、缓存等。Api控制器REST操作通过web角色1中的UI中的AngularJS称为异步 这些web角色组合在1 Azure云服务中

我正在开发一个ASP.NET MVC 5 web应用程序,该应用程序托管在Azure上,目前具有以下设置:

  • web角色1:用于UI的ASP.NET MVC项目:主要是一个带有AngularJS和bootstrap的单页应用程序
  • web角色2:ASP.NET MVC web Api项目:包含Api控制器,处理所有授权、数据访问(EntityFramework 6)、缓存等。Api控制器REST操作通过web角色1中的UI中的AngularJS称为异步
这些web角色组合在1 Azure云服务中,包括用于数据存储的SQL Azure数据库。Web角色2在角色缓存中使用来缓存大多数使用的实体。使用云服务的原因是,角色内缓存在云服务内的所有web角色2实例之间共享

我将UI与两个web角色的实际“工作”分开的最初原因是优化性能,因为缓存和数据处理不会干扰UI的显示。此外,在需要时,我可以为Azure中的任何角色配置额外实例,并可以指定用于角色2的最大缓存大小,而无需占用角色1的内存。这一切实际上都很有效

现在来回答问题。。。维护和更新这两个角色可能会很痛苦。此外,客户端可能会有点棘手,因为CORS HTTP POST在https等所有(移动)浏览器中都不能正常工作。因此,我考虑将这两个应用程序结合到一个web角色的1:1项目中,同时使用MVC和MVC web api。这会像单独设置一样执行吗?我可以将web角色配置为在Azure中使用更多实例/内存。这是否等同于有两个单独的角色和它们自己的实例,特别是在高负载和从客户机到服务器进行大量异步调用的情况下


另一方面:我在玩ASP.NET5(vNext)和MVC6,它消除了“普通”MVC控制器和WebAPI控制器之间的差异。这也促使我将两个独立的项目合并为一个ASP.NET 5项目。Azure SDK/Visual Studio中不支持在Azure云服务中部署ASP.NET 5项目,但这可能只是时间问题。

您对Web UI角色的具体关注是什么?如果它是一个单页应用程序,它将只为index.html文件和一些静态文件提供服务器(如果您将所有文件捆绑在一起,则这些文件非常少且相对较小)。如果您将其放在API角色中,则不会产生太大影响

另一方面,我使用不同的解决方案。我将所有SPA文件部署到blob存储。我只有一个API角色和一个索引操作方法,该方法进入blob存储,获取Index.html,在需要的地方注入blob存储基url(基本上是css、js和图像路径),并将其提供给客户端。因此,每次在浏览器中加载SPA时,web角色只处理一个非常轻的浏览器调用。其余的负载将被分配到blob存储中(无论如何,这并不多)


我希望这会有所帮助。

为了保持简单,请将您的网站和api组合到同一个应用程序中。只要确保整个过程都能执行和扩展,这就意味着一个可以自动扩展的无状态体系结构。MVC页面可以在它们通常使用的所有路由中使用,然后将所有WebAPI控制器分组到“/api”下