关于faultString = "Security error accessing url" 问题解决总结

来源:互联网 发布:淘宝权重怎么做上去 编辑:程序博客网 时间:2024/05/16 14:43

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,或者重置了地址等等。


原创粉丝点击