【问题标题】:Messages returned from a netTcpBinding WCF service are larger than those returned from an ASMX web service从 netTcpBinding WCF 服务返回的消息大于从 ASMX Web 服务返回的消息
【发布时间】:2014-11-26 21:23:55
【问题描述】:

基本上,我创建了一个 netTcpBinding WCF 服务,其方法返回一组从 500 到 50000 个对象的简单对象。这些对象包含一些字符串、int 和 DateTime 属性。调用此方法后,我试图测试内存消耗。我注意到,当我使用经典的 ASMX Web 服务执行相同的测试时,在这种情况下内存消耗更少。我的理解是 netTcpBinding WCF 服务中的消息是二进制编码的,而它们在 ASMX Web 服务中是 XML 格式的,因此在前一种情况下消息应该更小。但是,从 netTcpBinding 服务返回的消息几乎是 ASMX 消息大小的 2 倍。知道为什么会这样吗?

【问题讨论】:

  • 你是如何测量内存利用率的?
  • 在调用前后使用 GC
  • 这不是衡量内存利用率的有效方法。您需要使用内存分析器来执行此操作。
  • 像什么?你有免费工具的链接吗?

标签: c# web-services wcf soap nettcpbinding


【解决方案1】:

我的理解是,ASMX 是基于 HTTP 的,仅使用 SOAP 协议来传输数据,而 WCF 有多个绑定和传输选项。

TCP/IP 作为 WebService 和使用 WebService 的对象之间的流式连接运行。 TCP/IP 将重新传输任何丢失的数据包(所有连接都会丢失一些数据包),这反过来可能导致整体传输的数据更大。

见:http://msdn.microsoft.com/en-us/library/ms733769(v=vs.110).aspx

问题实际上在于您如何计算内存损失。你是使用 GC 类还是测量请求头的总大小?

【讨论】:

  • 我在通话前后都在使用 GC。我尝试了不同数量的对象,并且使用 ASMX Web 服务总是更小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多