【问题标题】:Why could Web Service call be slower than a web POST request为什么 Web 服务调用会比 Web POST 请求慢
【发布时间】:2012-02-17 23:27:11
【问题描述】:

我有一个托管在 IIS 中的 .NET Web 服务。在过去几年中,客户端一直在使用 Web 服务,当客户端连接速度较慢(例如 GPRS)时,偶尔会发生超时事件。另一方面,客户端有时必须将一些数据发布到另一个网页(ASP.NET Web 应用程序的一部分),并且通常 POST 请求中的数据大小大于 Web 服务调用中的实际负载。但是,与 Web 服务调用相比,POST 请求要快得多。

为了进一步确定这一点,我使用一种方法和另一个具有完全相同操作的单个网页创建了一个测试 Web 服务,即接收 100K 并发送回 100K(随机字节),我使用测试客户端将 Web 服务方法调用为以及在网页上发布的帖子并使用相同的客户端得到回复。接收来自网络服务的回复和来自网络发布请求的回复之间的差异是巨大的,即大约 1200 毫秒。为什么会这样? Web 服务上是否有任何这样的配置会产生如此大的差异?它是 SOAP 调用堆栈吗?序列化/反序列化?

【问题讨论】:

    标签: asp.net web-services iis web-applications


    【解决方案1】:

    许多因素可能会导致这种情况。

    我首先想到的是 SOAP 可以被认为是一个冗长的协议。也就是说,XML 有效负载中有大量数据是双向的。 XML 本身就很冗长,而且它并不是世界上处理速度最快的东西。当然,您可以使用优化的库来处理它的数据,但它会被解析为对象树,然后您可以遍历节点以深入了解您想要的数据。除非您使用 XPath,否则它只会做同样该死的事情。

    这一切都假设您实际使用的是 SOAP。并且您的 WebService 配置正确。并且在连接到 Web 服务时不会发生数据包丢失。并且您的防火墙不会产生问题。并且没有加密/解密开销。

    根据我自己的经验,经常导致服务器端显着减速的一件事是一个或多个抛出的异常。尝试Fiddler 跟踪。

    【讨论】:

    • ok SOAP/XML 可能是一个因素,我们正在谈论更多的数据正在传输,解析的开销可能是,但我仍然认为它不会产生如此大的影响.. 另一个至少在我的测试应用程序中不存在 2 个因素,即加密和异常(应用程序级别).. 我会尝试 Fidler.. 也不确定哪些配置选项可能会导致问题......谢谢
    • 您的数据包有多大?而且,我发现了这份相当古老的文档,但从研究的角度来看可能会对您有所帮助:nsfcac.rutgers.edu/TASSL/Papers/p2p-p2pws02-soap.pdf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多