HttpTransportSe.call()方法花费一分钟进行Web服务调用

时间:2013-03-22 14:16:27

标签: java android web-services ksoap2

我从Android应用程序调用Web服务。我通过应用程序对此服务进行了许多不同的调用,并且每个调用都在不到一秒的时间内返回数​​据,除了一个。即使实际的Web服务调用接近即时,我的一个呼叫也可能需要一分钟才能返回数据。该行出现问题:

transport.call(SOAP_ACTION, soapEnvelope);

调用它并且几乎立即从Web服务返回值。但是到达下一行可能需要一分钟时间:

SoapObject result = (SoapObject) soapEnvelope.bodyIn;

Web服务返回数据和应用程序命中下一行(上图)之间发生了什么?有没有办法减少这种延迟?有什么简单的检查吗?

2 个答案:

答案 0 :(得分:1)

  

有没有办法减少这种延迟?有什么简单的检查吗?

要知道的唯一方法是衡量各个领域的时间差异。对于SOAP Web服务调用,这些是需要测量的时间。

客户端时间

客户端应用程序代码 - >请求处理程序 - > 请求序列化 - > 请求发送 - > HTTP传输 - >服务器端

服务器端时间

接收HTTP请求 - >反序列化 - >应用代码 - >响应处理程序 - >序列化 - >发货 - > HTTP传输

阻塞通常在应用程序代码,处理程序和网络中。测量这些,你可以找到花费的时间。

  • 要测量应用程序代码和处理程序所用的CPU时间,请使用a 探查。我推荐Jprofiler
  • 要测量网络时间,请ping目标服务器,并使用Charles之类的Web调试代理。它可以告诉您请求在网络上花费的时间。

答案 1 :(得分:1)

只有在调试应用程序时才会发现延迟。在没有附加调试器的情况下运行应用程序时,它会立即返回。