c# - WCF 到 ASMX 绑定(bind)返回大数据比标准 Web 引用慢得多

标签 c# wcf asmx service-reference web-reference

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

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

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

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

最佳答案

看来这里有几个问题。

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

  2. 接下来,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.

引用:

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

关于c# - WCF 到 ASMX 绑定(bind)返回大数据比标准 Web 引用慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277898/

相关文章:

asmx - 如何从 Visual Studio 2008 中的配置文件中提取 ASP.NET Web 引用的 URL?

c# - 当职责不属于该类时,使用多态性而不是条件

c# - Wcf 并行和异步调用?

c# - 通过 REST 在列表中插入项目

c# - WCF 服务中的 HttpContext 为空?

.NET:如何弃用 WebMethod?

silverlight - 在 Silverlight 应用程序中捕获 Web 服务抛出的异常

c# - WPF MVVM 模式中的关注点分离

c# - 如何 - Windows Phone 7?

c# - 从使用方法作为参数的方法返回字符串