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 文件。
<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*.iflashigame.com" /> <allow-access-from domain="192.0.34.166" /> </cross-domain-policy> 注意事项:
默认情况下,策略文件必须命名为 crossdomain.xml,并且必须位于服务器的根目录中。但是,SWF 文件可以通过调用 Security.loadPolicyFile() 方法检查是否为其它名称或位于其它目录中。跨域策略文件仅适用于从其中加载该文件的目录及其子目录。因此,根目录中的策略文件适用于整个服务器,但是从任意子目录加载的策略文件仅适用于该目录及其子目录。
策略文件仅影响对其所在特定服务器的访问。例如,位于 https://www.adobe.com:8080/crossdomain.xml 的策略文件只适用于在端口 8080 通过 HTTPS 对 www.adobe.com 进行的数据加载调用。
2、针对Socket的策略文件
<cross-domain-policy> <allow-access-from domain="*" to-ports="507" /> <allow-access-from domain="*.example.com" to-ports="507,516" /> <allow-access-from domain="*.example2.com" to-ports="516-523" /> <allow-access-from domain="www.example2.com" to-ports="507,516-523" /> <allow-access-from domain="www.example3.com" to-ports="*" /> </cross-domain-policy> 这个策略文件是指定允许哪些域的主机通过那些端口链接。
现象:
跨域访问时,出现如下错误:
[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]
解决办法:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="all" /> <allow-access-from domain="*" secure="true" /> <allow-http-request-headers-from domain="*" headers="*"/> </cross-domain-policy>
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的文件,内容如下:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
其中的*符号可以根据你的实际需要设置,表示允许访问该域的域名,比如只允许来自chenfeisoft.com的页面访问,可以设置如下:
<cross-domain-policy>
<allow-access-from domain="*.chenfeisoft.com" />
<allow-http-request-headers-from domain="*.chenfeisoft.com" headers="*"/>
</cross-domain-policy>
如果你要带调用的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,或者重置了地址等等。