针对Flex+Java使用RemoteObject通讯 报错Channel.Connect.Failed error NetConnection.Call.Failed 404
今天在 Flex 中使用 RemoteObject 进行 java 调用时,报错
[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url:'http://localhost:8080/UnitCity/messagebroker/amf'"] ,于是百度之,网上说法很多,最多的是以下两种情况:
第一种情况:
[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url:'http://localhost:8889/WebContent/messagebroker/amf'"]
当 url 中是 WebContent 而不是工程名称时:这主要是因为 Context root 的设置问题,修改为工程名字即可;
方法:右键工程 - properties - flex server - Context root(/ 工程名)
第二种情况:
[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url:'http://localhost:8080/UnitCity/messagebroker/amf'"]
针对这种情况有人说是 tomcat 的问题,有人说是 RemoteObject 调用时需要添加 endpoint="http://localhost:8080/ 项目名 /messagebroker/amf">,例如
<mx:RemoteObject id="tPublicUserService" destination="tPublicUserService" endpoint="http://localhost:8080/ 项目名 /messagebroker/amf">
</mx:RemoteObject>
而我在调用时已经配置了这个,但是依然有问题,那就是第三种情况了,
第三种情况(我的情况):
于是我继续查找,终于找到了原因:由于我在 web.xml 里只配置了 flex 监听,而忘了配置 servlet;解决方法如下:
也有人说添加下面的也可以,具体没有测试:
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>