多个服务电话或大型数据合同? Chatty vs. Chunky

时间:2012-06-09 19:26:13

标签: wcf

在您必须在服务端执行多项操作的情况下,在表单提交上,例如将数据插入多个表中,最好是使用大型数据合同进行单个服务调用还是使用多个小型数据交换进行多个服务调用?

进一步阐述我的问题,举一个例子,假设我们有一个表格来添加“会议”。该表格允许用户填写有关会议的信息,例如ConferenceName,ConferenceDate,....,演示者,赞助商等。由于某些信息将被插入会议表中,一些在ConferencePresenters表中,一些在ConferenceSponsors表中。那么,使用大型数据合同的单个调用将所有数据发送到Web服务,或者使用多个数据交换进行单独的服务调用会更好吗?

两者中哪一个更贵 - 拥有大量的数据合同或多个服务电话?

3 个答案:

答案 0 :(得分:4)

很难量化更好。但你可以考虑带宽,原子性,服务组织等等。

对于带宽,由于每个请求增加了时间,因此一个大块的请求将更快通过线路。此外,客户端不会等待他们的孩子(因为缺少更好的词)之前创建的各种实体的n *延迟。

我假设您有一个支持您的服务的数据库,这将允许您在事务中执行此操作。如果你选择了一个健谈的服务,那么你将自己管理回滚等等。

要考虑的另一个重要事项是如何设计服务API。厚实的操作有意义吗?如果你发现你的块增长了可选操作,你可以将它们分解出来。如果你发现2个api总是一起调用并且有意义结合起来,请将它们组合起来。

所以,您可能会发现拥有大量数据合同对于上面提到的操作(与赞助商创建会议等)的性能更高,但是您确保性能提升值得权衡。有这么大的,特定的api电话。

答案 1 :(得分:1)

您也可以从架构的角度来看待这个问题。

您有服务:

  • 服务应该代表具有商业意义的东西。
  • 服务不应泄露有关服务内部实现的信息,包括数据库的表结构

从这个角度来看,你应该只进行一次操作。

答案 2 :(得分:0)

每次都很矮胖,或者尽可能粗壮。经验法则使对话尽可能大,减少了箔条。