调用Web服务有多贵?

时间:2014-01-17 14:47:36

标签: c# web-services

我在google上搜索得相当不错,但没有任何内容可以回答我的问题。由于我对Web服务知之甚少(仅开始使用它们,而不是在过去几个月内构建它们),我想知道我是否应该按照我的意愿(在合理范围内)频繁地调用特定的Web服务,或者应该我建立了一次性的请求。

举个例子,我的应用程序旨在进行作业更新,对于某些类型的更新,它将调用Web服务。似乎我的选择是我可以在我的更新应用程序中创建一个数据表,需要Web服务并将整个数据表传递给Web服务,然后在Web服务中编写一个方法来处理数据表的更新。或者,我可以遍历整个更新表(包括除需要Web服务的更新之外的其他更新),并在更新需要时调用Web服务。

目前看来,将每个更新而不是数据表传递给Web服务会更简单。

就传递给Web服务的数据而言,每次更新都包含少量数据(3个字符串,最多120个字符)。就更新次数而言,可能不会超过200次。

2 个答案:

答案 0 :(得分:5)

  

我想知道我是否可以按照自己的意愿(在合理范围内)频繁调用特定的Web服务,或者我是否应该一次性建立请求。

Web服务与否,通过网络路由的任何呼叫都将受益于构建多个请求,以便可以在一次往返中处理它们。在您的情况下,构建代表所有更新的对象将成为明显的赢家,尤其是在连接速度较慢的设置中。

当您通过网络进行呼叫时,当客户端与服务器进行通信时(或者不是Web服务),这些事情需要发生:

  1. 与您的通话相关联的数据会在客户端
  2. 上序列化
  3. 序列化数据发送到服务器
  4. 服务器反序列化数据
  5. 服务器处理数据,生成响应
  6. 服务器序列化响应
  7. 服务器将序列化响应发送回客户端
  8. 响应在客户端上反序列化
  9. 步骤2和6通常会因网络延迟而导致延迟。对于简单的操作,延迟通常会占据呼叫的时间。

    用于高频交易的最快网络的延迟以微秒为单位;在常规的,它是在几毫秒。如果你在1ms延迟(每次往返2ms)的网络上逐个发送100个软件包,那么你在网络延迟上浪费了200ms!这五分之一秒,很多时候按照当今CPU的标准。如果你可以通过重组你的请求来消除它,那么这是一个很好的理由。

答案 1 :(得分:1)

您通常应该使用粗粒度远程接口而不是细粒度远程接口。

考虑为每次通话添加10ms的网络延迟 - 100次更新会有什么延迟?