7

我正在使用 WCF 服务引用绑定到现有的 ASMX Web 服务。我有一个方法,它返回一个包含 500k 长度的字符串的 DataSet 对象。

作为标准的“老式”网络参考,调用此方法大约需要 2-3 秒才能完成。作为 WCF 服务参考,这需要 20 多秒才能完成。这现在对我们的系统产生了影响:(

我尝试更改绑定以最大化所有 maxReceivedMessageSize 和 maxBytesPerRead 等,但它没有任何区别。

为什么 WCF 引用这么慢,我该怎么做才能解决这个问题?

4

3 回答 3

2

这里似乎有一些问题。

  1. 首先,除非另有配置,否则 WCF 服务是有状态的,必须在每个新连接上激活。由于身份验证的额外往返行程,SSL 会减慢此激活速度。由于上面导致的问题/建议之一,尝试建立初始连接,然后尝试执行该方法 10 次左右并测量后续调用所需的时间,在初始调用之后应该会快得多。事实上,根据 MS的说法,WCF 在处理调用方面比“老派”的 ASMX 更有效,但仍然受制于激活时间。

  2. 接下来,WCF 在后台发生了一些疯狂的序列化操作,并且不能很好地与 DataSet 对象配合使用,因为 DataSet 对象具有大量的开销和元数据。如果必须使用更大的数据集,则应将流的序列化更改为 MTOM 或二进制(但这仅在您的客户端也是基于 WCF/.NET 的情况下才有效)。另一种选择是不使用 DataSet,这可能是 WCF 的最佳选择。 这是一篇关于序列化数据集速度的有趣文章的链接

关于为什么不使用数据集的附加文章。

参考:

http://msdn.microsoft.com/en-us/library/bb310550.aspx

http://blogs.microsoft.co.il/blogs/oshvartz/archive/2011/07/23/wcf-performance-using-datasets-part-2.aspx

http://www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx

于 2012-08-01T02:50:10.437 回答
0

您确实需要查看许多方面,尤其是您在数据量方面进行同类比较。可能还有其他因素导致减速。

我的第一个问题是您为什么将其更改为 WCF?这是否有特定原因 - 我知道这是正确的方法,但是否有特定原因意味着现在需要更改?界面是否有任何可能产生广泛影响的变化。

由于对象处理,WCF 可能会稍微慢一些,但它不应该有这种差异。这一切都表明环境中的其他东西才是真正的问题。

于 2011-06-23T10:25:25.543 回答
0

正在使用什么类型的绑定?有BasicHttpBinding和WSHttpBinding,模拟asmx推荐使用BasicHttpBinding。一般来说,WCF 至少应该与它们的 asmx 对应物相媲美。如果这没有帮助,请尝试调整 WCF 的并发设置和实例化模式。

于 2011-09-10T04:19:30.913 回答