如果我使用knockout.js或angular.js作为表示层,还假设服务层需要写入数据并从数据库中读取数据,并且它保存业务规则。有没有理由为什么我应该使用WCF而不是asp.net MVC作为服务层?调用返回JSON数据的MVC控制器似乎很简单,我想不出使用WCF的原因。
答案 0 :(得分:5)
如果您专门针对Web堆栈,ASP.NET MVC + WebApi将是服务器端的正确组合。
客户端和服务器上对JSON的固有支持使得基于JSON的API非常流行。来自大多数提供程序的越来越多的公共API是基于JSON的,或者至少支持JSON。
WCF可能在服务器到服务器通信方面具有适用性,但对于Web堆栈,我认为它不适合。如果您需要支持多种传输介质,请使用HTTP以外的协议进行绑定,支持二进制序列化以提高性能,满足复杂的安全要求,然后WCF可以为您提供帮助。
对于基于JSON的API,我建议您使用WebApi而不是使用MVC并返回JsonResult
。
答案 1 :(得分:3)
WCF中的要点是将获取内容的方法与逻辑本身分开。如果您稍后决定将此逻辑重新用于需要SOAP接口或二进制绑定的内容,这将非常有用。
如果你使用MVC,并且你在视图层中硬编码JSON作为输出,那么你就可以使用它作为你的线上协议。另外,您必须自己编写更多对象的JSON序列化。
很多方面取决于您构建服务的方式,以及您打算为应用程序设置流控制的位置。例如,假设您要提交表单以保存某些内容。保存内容后,您是否打算控制下次编码(成功或失败)到客户端的位置?或者您想在服务器上处理该路由决策吗?
如果它是基于客户端的,那么WCF可能更合适,因为您实际上是将控制器和视图层移动到客户端中。服务器端服务纯粹是业务和数据服务,实际上它们是“域模型”。
如果你想在服务器端控制它,那么MVC更像你正在寻找的东西,因为你需要一个控制器,而“view”层在客户端和服务器之间分开。但客户端必须以这样一种方式编写,即它尊重服务器告诉它要做的事情。客户端变成一个愚蠢的渲染器,服务器会告诉它何时转到新页面。
答案 2 :(得分:0)
我会在MVC上使用WCF,因为使用WCF,如果你编写了一个合适的BO层,你可以从mobile,workflow,winform等等轻松访问该层.etc.etc。所有你想要的。 MVC将把你锁定在操作控制器的范例中。我使用WCF(通常公开soap和rest绑定)从同一业务对象执行所有我的企业级n层应用程序,从而提供最大的灵活性。