【问题标题】:Flex HTTPService Timeout handlerFlex HTTPService 超时处理程序
【发布时间】:2025-12-21 11:40:11
【问题描述】:

我的 flex 应用程序在启动时会发送一些并发请求。有时需要很长时间才能全部获取它们,所以我将它们设置为 requestTimeout 参数为 5 秒。此外,我还定义了一个处理故障事件的方法。我想在发生超时时重新发送请求。 但它不起作用。可以看一下代码吗?

protected function fatalErrorOccuredInfo(event:FaultEvent):void
{
    // get the operation
    var operation:mx.rpc.http.AbstractOperation = mx.rpc.http.AbstractOperation(event.target);

    operation.url += "?t=" + new Date().getTime();
    operation.useProxy = false;
    //this should resend a request that caused timeout
    operation.send();

}

我检查是否在网络监视器中发送了新请求,但它没有显示任何内容:-(

任何帮助将不胜感激。

【问题讨论】:

    标签: apache-flex actionscript-3 flex3 air


    【解决方案1】:

    WebService 类有一个getOperation 函数,它返回一个AbstractOperation

    event.currentTarget.name一起使用

    所以应该是这样的

    var operation:mx.rpc.http.AbstractOperation = myWebService.getOperation(event.currentTarget.name);
    operation.send();
    

    我不太确定,但如果 operation.send() 没有收到结果事件,您可能需要为 ResultEvent.RESULT 添加事件侦听器

    【讨论】:

    • 嗯。我认为我不需要它,因为在这种情况下操作不是空的,所以我用 AbstractOperation 填充了我需要的所有数据。此外,我没有收到任何错误(空指针或某事)。它只是不发送请求。您认为您的解决方案会有所不同吗?
    • 您是否尝试过仅出于测试目的调用不同的 Web 服务?如果operation 不为空,那么它应该可以工作。您是否设置了断点并查看 operation.send() 是否实际执行? :)
    • 我没有尝试过不同的 web 服务,但是我做了一些调试并且 operation.send() 实际执行了。我什至把 Alert.show() 放在下一行,它总是出现。总而言之,它应该工作,但它没有。废话。
    • 你有没有试过在operation.send()被调用之后,web服务是否真的被调用了?
    • 没有。我怎么做?我所知道的是 operation.service 是空的,我认为不应该是。也许这就是原因。
    【解决方案2】:

    我看到的一个问题是这条线

    operation.url += "?t=" + new Date().getTime();
    

    每次发出请求时,都会附加 "?t=" + new Date().getTime();
    虽然这不应该是您的主要问题,但这是一个问题。

    private var operationURL:String = "someurl.com/page.php";
    private function loadOperation( ):void{
      var operation:mx.rpc.http.AbstractOperation = mx.rpc.http.AbstractOperation(event.target);
      operation.url = operationURL + "?t=" + new Date().getTime();
      operation.useProxy = false;
      operation.send();
    }
    
    private var retryCount:int = 0
    protected function fatalErrorOccuredInfo(event:FaultEvent):void{
      // don't want it stuck in an endless loading loop
      // 10 count is more then enough 
      if( retryCount < 10 ){
        this.loadOperation( );
        ++retryCount 
      }
    }
    

    此外,如果您安装了 FireFox,请获取一个名为 HTTPfox 的附加组件。
    HTTPfox 将向您显示来自浏览器的所有请求

    【讨论】: