【问题标题】:flex webservice fault : HTTP request errorflex webservice 故障:HTTP 请求错误
【发布时间】:2009-02-17 12:03:41
【问题描述】:

我正在使用 Flex 3 和 WebService 组件。我开始遇到以下错误

 HTTP request error

调用服务方法时。这个错误只出现了,我不知道是什么原因造成的

 <mx:WebService
    useProxy="false"
    id= "myService">
         <mx:operation name="getName" resultFormat="object"
        result="getNameResultHandler(event)"
        fault="faultHandler(event)"/>
 </mx:WebService>

我将 wsdl 设置为我的 init 方法,我将其作为 flashvar 读入。有什么想法吗?

我用来拨打电话的代码如下;

var id:Strig = Application.application.parameters.id;
mysERVICE.getname(id);

好的,我在抛出错误时看到以下内容

[RPC Fault faultString="HTTP request error" faultCode="Server.Error.Request" faultDetail="Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://localhost:9081/app/services/RoomLookup"]. URL: http://localhost:9081/`app/services/RoomLookup`"]

它显示的 url 与我作为参数提供的 wsdlUrl 不同

app/services/RoomLookup

是 flex 附加了 localhost,或者这可能是存储在缓存中的东西


我已经记录了这个并得到“Http请求错误”

【问题讨论】:

    标签: apache-flex web-services fault


    【解决方案1】:

    大多数 SOAP 和 RPC 框架会将错误响应的 HTTP 状态代码设置为 500。 Flash Player 无法处理状态代码为 500 的 HTTP 响应的内容,因此可能难以使用。不幸的是,没有办法在播放器中解决这个问题,所以最常见的方法似乎是确保服务器不会将用户代理为 Flash 的请求的错误响应的 HTTP 状态设置为500播放器。

    【讨论】:

    • 我将在此处支持 Erik 的回答。我们编写了一个过滤器(我们使用的是 Tomcat),它将所有 500 更改为 200,并允许您在 Flex 端访问从 SOAP 错误返回的大量信息。
    【解决方案2】:

    将以下内容添加到faultHandler()

    trace(event.fault.faultString, "Error");
    if (event.fault is SOAPFault) {
        var fault:SOAPFault=event.fault as SOAPFault;
        var faultElement:XML=fault.element;
        // ...
    }    
    

    这会让你开始挑选。

    【讨论】:

    • 尝试通过浏览器/libcurl 访问网络服务。
    【解决方案3】:

    使用像 Fiddler 这样的 http 调试器来找出确切的请求/响应是什么。 Flex 没有公开soap 错误的细节,或者至少它不习惯这样做。例如,请参阅here

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      相关资源
      最近更新 更多