2012-01-24 62 views
1

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

为了进一步建立这个测试网络服务,我使用一个方法和另一个网页创建了完全相同的操作,即接收100K并发回100K(随机字节),并且使用测试客户端调用Web服务方法以及在网页上发布了一篇文章,并使用同一个客户端得到了回复。从网络服务接收回复和从网络发布请求回复的差异是巨大的,即大约1200毫秒。为什么会这样? Web服务中是否有这样的配置会产生如此大的差异?它是否是SOAP调用堆栈?序列化/ Desrialization?

回答

0

许多因素可能对此有所贡献。

我首先想到的是SOAP可以被认为是一个冗长的协议。也就是说,XML有效载荷中有很多数据是双向的。 XML本身是冗长的,它并不是宇宙中处理最快的东西。当然,你可以使用一个优化的库来处理它的数据,但是它会被解析到对象树中,然后你可以走这些节点深入到你想要的数据。除非你使用XPath,它只会做同样的事情。

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

根据我自己的经验,有一件事情经常会导致服务器端速度变慢,这是一个或多个抛出的异常。尝试一个Fiddler跟踪。

+0

ok SOAP/XML可能是一个因素,我们正在讨论更多的数据传输和解析的开销可能是,但我仍然不认为它应该有这么大的影响..其他2个因素不存在在我的测试应用程序,至少即加密和例外(应用程序级别)..我会尝试菲德勒虽然..也不知道什么样的配置选项可能造成的问题...谢谢 – Shahid

+1

你的数据包有多大?而且,我发现这份文件相当陈旧,但是可以从研究的角度帮助您:http://nsfcac.rutgers.edu/TASSL/Papers/p2p-p2pws02-soap.pdf –