我正在使用 WCF 服务引用绑定(bind)到现有的 ASMX Web 服务。我有一个返回包含 500k 长度字符串的 DataSet 对象的方法。
作为标准的“老派”网络引用,调用此方法大约需要 2-3 秒才能完成。作为 WCF 服务引用,这需要 20 多秒才能完成。这现在对我们的系统产生了影响:(
我已经尝试更改绑定(bind)以最大化所有 maxReceivedMessageSize 和 maxBytesPerRead 等,但没有任何区别。
为什么 WCF 引用这么慢,我该怎么做才能解决这个问题?
最佳答案
看来这里有几个问题。
首先,除非另行配置,否则 WCF 服务是有状态的,必须在每个新连接上激活。由于额外的来回身份验证行程,SSL 会减慢此激活速度。作为上述问题/建议之一,尝试建立初始连接,然后尝试执行该方法 10 次左右并测量后续调用所花费的时间,初始调用后应该快得多。事实上,according to MS ,WCF 在处理调用方面比“老派”ASMX 更有效,但仍受激活时间的限制。
接下来,WCF 在后台发生了一些疯狂的序列化操作,并且不能很好地处理 DataSet 对象,因为 DataSet 对象具有大量的开销和元数据。如果必须使用更大的数据集,您应该将流的序列化更改为 MTOM 或二进制(但这仅适用于您的客户端也基于 WCF/.NET 的情况)。另一种选择是不使用数据集,这可能是 WCF 的最佳选择。 Here is a link to an interesting article about the speed of serializing datasets .
An additional article on why not to use DataSets.
引用:
关于c# - WCF 到 ASMX 绑定(bind)返回大数据比标准 Web 引用慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277898/