Flex RPC错误整理

最近不少网友反映使用Fluorine实现Flex与.NET通信老是出错,原因肯定不一样,为节约时间,我想有必要整理一下Flex RPC常见错误。此处先整理一下Flash Remoting方面的,后续会加上HTTP Service和Web Service的。

Flex Remoting

  1. RPC Fault faultString=”Send failed” faultCode=”Client.Error.MessageSend” faultDetail=”Channel.Connect.Failed error NetConnection.Call.Failed:endpoint或destination或方法名设置不正确。
  2. RPC Fault faultString=”Send failed” faultCode=”Client.Error.MessageSend” faultDetail=”Channel.Connect.Failed error NetConnection.Call.BadVersion:使用了endpoint URL跳转。
  3. Channel definition, mx.messaging.channels.RTMPChannel, can not be found…:最新版的Fluorined在services-config.xml中新增了RTMP Channel,主要是用来配 置Flex Messaging,编译时需要FDS.swc支持,当然如果不需要此功能可以注释掉channel-definition这个节点。
  4. RPC Fault faultString=”The requested type… is not accessible”:Flash Remoting服务名不对。详见Flash Remoting支持的远程服务
  5. RPC Fault faultString=”Could not find a suitable method with name …” :找不到对应的方法。首先检查方法名对不对,再看方法的参数个数, 参数类型,还要检查返回数据的类型。关于数据的类型详见AS3数据类型转换成Fluorine数据类型Fluorine .NET数据类型转换成AS3数据类型
  6. Method ambiguity, could not select the method with name …:方法名模棱两可,Fluorine无法选择。这是由于Fluorine不支持方法的多态,改写成多个方法名再调用就没有这个问题了。
  7. NetConnection.Call.Failed: HTTP: Status 404: url…:’虚拟主机的域名/子目录/Gateway.aspx'”:没将Root URL设置为虚拟主机的域名。详见Flex Bulider 2与Flash cs3的发布文件
  8. RPC Fault faultString=”Send failed” faultCode=”Client.Error.MessageSend” faultDetail=”Channel.Connect.Failed errorNetConnection.Call.Failed: HTTP: Status 404: url: ‘http://localhost/Gateway.aspx…'”: Root URL中包含的Context与Context root中设置的不一致。
  9. [RPC Fault faultString=”Send failed” faultCode=”Client.Error.MessageSend” faultDetail=”Channel.Security.Error error Error #2048…: 安全沙箱冲突
  10. RPC Fault faultString=”MessagingError message=’Destination ‘fluorine’ either does not exist or the destination has no channels defined (and the application does not define any default channels.)'” faultCode=”InvokeFailed” faultDetail=”Couldn’t establish a connection to ‘fluorine'”…:FluorineFX没配置或destination 没有定义channels(默认是fluorine),详见配置支持Fluorine Remoting的Web应用
  11. ReferenceError: Error #1056: 无法为 …创建属性…:当使用[RemoteClass(alias=”XXX”)],客户端与服务器端Value Object映射时属性名不一致。
  12. ArgumentError: Error #2173: 无法读取流中的对象。类 flex.messaging.io.ArrayCollection 虽未实现 flash.utils.IExternalizable,但由其别名可得知它为 externalizable 类。对于List,默认下Fluorine会转换成As3 ArrayCollection而不是Array,而AS3工程是不支持ArrayCollection的。解决方法就是导入该类,并注册:registerClassAlias(“flex.messaging.io.ArrayCollection”, mx.collections.ArrayCollection),另外也可以在service-config.xml文件的子节点中设置<legacy-collection>true</legacy-collection>不过,这样设置后就意味着在Flex工程中不能直接使用Fluorine转换成的ArrayCollection了。

Http Service

  1. faultCode:Server.Proxy.Request.Failed faultString:’HTTP/1.1 404 Not Found’ faultDetail:’HTTP/1.1 404 Not Found’:url错误。
  2. faultCode:Channel.Security.Error faultString:’Security error accessing url’ faultDetail:’Destination: DefaultHTTP’:不使用代理时遇到 安全沙箱冲突。
  3. The URL specified XXX is not allowed by the selected destination ‘DefaultHTTP:使用默认终端代理时遇到安全沙箱冲突。
  4. No destination with id XXX is registered with any service/MessagingError message=’Destination ‘students’ either does not exist or the destination has no channels defined (and the application does not define any default channels.)’:.使用命名终端代理时,destination不一致。

发表评论