C# WCF到ASMX绑定返回大数据的速度比标准web引用慢得多

C# WCF到ASMX绑定返回大数据的速度比标准web引用慢得多,c#,wcf,asmx,service-reference,web-reference,C#,Wcf,Asmx,Service Reference,Web Reference,我正在使用WCF服务引用绑定到现有的ASMX web服务。我有一个方法返回一个DataSet对象,该对象包含一个长度为500k的字符串 作为标准的“老派”web参考,调用此方法大约需要2-3秒才能完成。作为WCF服务参考,这需要20多秒才能完成。这正在对我们的系统产生影响:( 我尝试过修改绑定以最大化所有的maxReceivedMessageSize和maxBytesPerRead等,但没有任何区别 为什么WCF引用速度会慢得多?我能做些什么来解决这个问题?您确实需要查看许多方面,尤其是您在比较

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

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

我尝试过修改绑定以最大化所有的maxReceivedMessageSize和maxBytesPerRead等,但没有任何区别


为什么WCF引用速度会慢得多?我能做些什么来解决这个问题?

您确实需要查看许多方面,尤其是您在比较数据量方面的相似之处。可能是其他因素导致了速度的减慢

我的第一个问题是,为什么要将其更改为WCF?是否有具体的原因?我知道这是正确的做法,但是否有具体的原因意味着现在需要进行更改?是否对接口进行了任何可能产生广泛影响的更改


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

使用的是什么类型的绑定?有BasicHttpBinding和WSHttpBinding,要模拟asmx,BasicHttpBinding是推荐使用。一般来说,WCF至少应与asmx对应版本相当。如果没有帮助,请尝试调整WCF的并发设置和实例化模式。

这里似乎有一些问题

  • 首先,WCF服务是有状态的,除非另有配置,否则必须在每个新连接上激活。由于额外的身份验证来回行程,SSL会减慢此激活速度。作为上述问题/建议之一,请尝试建立初始连接,然后尝试执行该方法10次或10秒o并测量后续呼叫所需的时间,在第一次呼叫后应快得多。事实上,WCF在处理呼叫方面比“老派”ASMX更有效,但仍需要一段激活时间

  • 接下来,WCF会在后台执行一些疯狂的序列化操作,并且不能很好地处理DataSet对象,因为DataSet对象具有大量的开销和元数据。如果必须使用较大的DataSet,则应将流的序列化更改为MTOM或二进制(但这只有在您的客户端也是基于WCF/.NET的情况下才有效)。另一个选择是不使用数据集,这可能是涉及WCF的最佳选择

  • 参考:


    传输前后的消息大小是多少?首先要弄清楚这是否与带宽和处理开销(安全性等)有关。500k不是不合理的。您是否尝试过查看WCF跟踪(针对客户端)和IIS日志(针对服务器)要查看花费的时间在哪里?听起来像是在客户端,但最好缩小问题范围。此外,是否每次调用都会出现减速?如果您连续调用该服务10次,每次的性能是否相同?它没有更改,它始终是wcf引用,添加web引用是为了测试速度由于我们有其他应用程序从相同的web服务下载相同的数据,没有任何速度问题。我想补充一点,此web服务确实存在于https上的ssl证书之后。好的,界面的某些部分会降低速度(WCF和ssl),但不是很重要,除非你正在处理大量数据。这将表明环境发生了变化。你能用新旧学校和新学校的方法进行测试,并比较时间吗?然后我建议确保数据库访问是相同的。没有直接的答案,也不应该有直接的答案如果存在这种差异,那么您必须找出问题的根源。他无法在客户端上使用wsHttpBinding绑定到现有的asmx服务。很明显,他使用的是basicHttpBinding。实际上,每个人的工作都是不断改进问题和答案。感谢您改进您的answeR