【问题标题】:HttpTransportSe.call() method taking up to a minute for web service callHttpTransportSe.call() 方法最多需要一分钟来调用 Web 服务
【发布时间】:2013-03-22 14:16:27
【问题描述】:

我正在从我的 Android 应用程序调用网络服务。我在整个应用程序中对该服务进行了许多不同的调用,并且每个调用都在不到一秒的时间内返回数​​据,除了一个。即使实际的 Web 服务调用几乎是即时的,我的一个调用也可能需要一分钟才能返回数据。该行出现问题:

transport.call(SOAP_ACTION, soapEnvelope);

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

SoapObject result = (SoapObject) soapEnvelope.bodyIn;

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

【问题讨论】:

  • 你确定结果这么快吗?服务器可能由于某种原因保持连接打开
  • 是的,当我在网络浏览器中转到网络服务位置时,它会立即返回结果。而在远程调试Web服务时,延迟是从函数返回字符串到SoapObject result = (SoapObject) soapEnvelope.bodyIn;行,因此Web服务没有延迟。对 Web 服务的所有其他调用对请求使用完全相同的代码,只需更改几个变量就可以了。

标签: java android web-services ksoap2


【解决方案1】:

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

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

客户端时间

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

服务器端时间

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

阻塞通常出现在应用程序代码、处理程序和网络中。衡量这些,你就可以找到时间花在哪里了。

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

【讨论】:

  • 我知道延迟在哪里,它在 ksoap2 3rd 方库中,特别是在 HttpTransportSE.call() 方法中。我正在寻找解决此延迟的方法,或者查看可能导致延迟的这段代码发生了什么。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多