1 FLEX HttpService错误
[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[C:/autobuild/3.2.0/frameworks/projects/rpc/src/mx/rpc/AbstractInvoker.as:220]
at mx.rpc::Responder/fault()[C:/autobuild/3.2.0/frameworks/projects/rpc/src/mx/rpc/Responder.as:53]
at mx.rpc::AsyncRequest/fault()[C:/autobuild/3.2.0/frameworks/projects/rpc/src/mx/rpc/AsyncRequest.as:103]
at DirectHTTPMessageResponder/securityErrorHandler()[C:/autobuild/3.2.0/frameworks/projects/rpc/src/mx/messaging/channels/DirectHTTPChannel.as:389]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/redirectEvent()
关于策略文件的格式(可以在Flash CS3帮助里面的Flash Player安全性——》控制权限概述中找到)
1、针对web应用的策略文件
下面的示例显示了一个策略文件,该文件允许访问源自 *.iflashigame.com 和 192.0.34.166 的 SWF 文件。
默认情况下,策略文件必须命名为 crossdomain.xml,并且必须位于服务器的根目录中。但是,SWF 文件可以通过调用 Security.loadPolicyFile() 方法检查是否为其它名称或位于其它目录中。跨域策略文件仅适用于从其中加载该文件的目录及其子目录。因此,根目录中的策略文件适用于整个服务器,但是从任意子目录加载的策略文件仅适用于该目录及其子目录。
策略文件仅影响对其所在特定服务器的访问。例如,位于 https://www.adobe.com:8080/crossdomain.xml 的策略文件只适用于在端口 8080 通过 HTTPS 对 www.adobe.com 进行的数据加载调用。
2、针对Socket的策略文件
现象:
跨域访问时,出现如下错误:
[FaultEvent fault=[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"] messageId="30264797-379F-313E-3D8A-B7ADD21393B5" type="fault" bubbles=false cancelable=true eventPhase=2]
解决办法:
swf文件跨域访问的时候,会报以下错误:
[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()
at mx.rpc::Responder/fault()
at mx.rpc::AsyncRequest/fault()
at DirectHTTPMessageResponder/securityErrorHandler()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/redirectEvent()
解决办法是在webservice(或者httpservice)所在网站的根目录下建立一个名为crossdomain.xml的文件,内容如下:
其中的*符号可以根据你的实际需要设置,表示允许访问该域的域名,比如只允许来自chenfeisoft.com的页面访问,可以设置如下:
如果你要带调用的webservice不在自己可以控制的服务器上,还可以用javascript写一个本地代理来访问,比如proxy.asp
<%@LANGUAGE="JSCRIPT" CODEPAGE="65001"%>
<%
with (Response) {
Charset = "utf-8";
Buffer = true;
Expires = -10;
}
function Proxy (url) {
this.url = url;
this.write = function () {
if (url.length == 0 || url == undefined)
error("URL 不能为空");
var x = new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET", this.url, false);
x.send();
Response.Write(x.responseText);
x = null;
}
function error (message) {
Response.Write(message);
Response.End();
}
}
var proxy = new Proxy( String(Request.QueryString) );
proxy.write();
%>
可以通过www.yourdonmain.com/proxy.asp?http://www.destination.com/service.xml来访问
转载:http://blog.csdn.net/feitianfjl/article/details/5838330
[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[E:\dev\hero_private\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:345]
at mx.rpc::Responder/fault()[E:\dev\hero_private\frameworks\projects\rpc\src\mx\rpc\Responder.as:68]
at mx.rpc::AsyncRequest/fault()[E:\dev\hero_private\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:113]
at DirectHTTPMessageResponder/securityErrorHandler()[E:\dev\hero_private\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:437]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/redirectEvent()
活到老,学到老!
最近研究flex+mysql+php通讯,今天在测试时 遇到个问题就是以上的错误,仔细一看原来是域问题,
难怪配置了PHP默认地址到flex做数据源运行要报错,网上查了下资料有叫做xml的,还有就是些其他的办法,但只是个demo没必要整得那么复杂。
打开flex4.5的 运行配置 修改URL路径为IP(非127.0.0.1 和localhost)
转载:http://blog.sina.com.cn/s/blog_735cd12d0100u1fn.html
实际处理中,如果放了策略文件还是报错,处理这个域问题,还需要仔细确认请求地址是否合法有效。比如请求地址是否少了www,或者重置了地址等等。