Flex crossdomain.xml在Chrome / Firefox中无法正常运行?

时间:2010-08-19 05:41:30

标签: flex flash google-chrome policy crossdomain.xml

我花了很多时间在这上面,所以这就是我被困住的地方。

我正在使用调试播放器10.1从以下位置获取XMLA请求:

http://localhost/dir/blah.swf

为:

http://localhost/olapbin/msblah.dll

这在文件系统中运行良好,但现在它在IIS7 Web服务器上。

经过大量摆弄crossdomain.xml文件后我决定:

<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

放在:

http://localhost/crossdomain.xml

并阅读:

Security.loadPolicyFile("http://localhost:80/crossdomain.xml");

我设置了策略文件日志记录(帮助提出了上述文件) 在IE8上它的一切工作都很好。我明白了:

OK: Root-level SWF loaded: http://127.0.0.1/akts/ThinSlicerRunner.swf
OK: Policy file accepted: http://localhost/crossdomain.xml
OK: Searching for <allow-access-from> in policy files to authorize data loading from resource at http://localhost/olapbin/msmdpump.dll by requestor from http://127.0.0.1/akts/ThinSlicerRunner.swf
OK: Searching for <allow-http-request-headers-from> in policy files to authorize header sending to URL http://localhost/olapbin/msmdpump.dll by requestor from http://127.0.0.1/akts/ThinSlicerRunner.swf
OK: Request for resource at http://localhost/olapbin/msmdpump.dll by requestor from http://127.0.0.1/akts/ThinSlicerRunner.swf is permitted due to policy file at http://localhost/crossdomain.xml

在Chrome和Firefox上,我得到:

OK: Root-level SWF loaded: http://localhost/akts/ThinSlicerRunner.swf
OK: Policy file accepted: http://localhost/crossdomain.xml

,没有别的......没有尝试授权httpservice请求。

在主要的flex错误日志中,我得到:

*** Security Sandbox Violation ***
Connection to  
http://localhost/olapbin/msmdpump.dll
  halted - not permitted from http://localhost/akts/ThinSlicerRunner.swf

当我从IE8运行相同的东西时,它不会出现。 知道发生了什么事吗?

AS REQUESTED ...更多代码

主要发送请求:

var connection:TsConnection = this.__connection; 
var token:AsyncToken = new AsyncToken(null);
connection.service.request = this.__curSoapRequest;  
var actualToken:AsyncToken = connection.service.send();
__tokenArr.push(actualToken);
var responder:AsyncResponder = new AsyncResponder(resultHandler, faultHandler, actualToken);
__responderArr.push(responder);
actualToken.addResponder(responder);

连接对象亮点:

   public function init():void {

        //Initialize the service object needed to query the server

    this.__service = new HTTPService;
    this.__service.method = "POST";
    this.__service.contentType = "application/xml";
    this.__service.resultFormat = "e4x";
    this.__service.headers = getHeaders();
    this.__service.url = this.__model.xmlaUrl;
    this.__initialized = true;
}

public function get service():HTTPService {
    return this.__service;
}

private function getHeaders():Object {
    var o:Object = {};
    o["SOAPAction"] = '"urn:schemas-microsoft-com:xml-analysis:Discover"';
    o["Content-Type"] = "text/xml";
    return o;
}   

感谢您的帮助......希望在修复后帮助其他人。 ; - )

肖恩 http://www.vidgridz.com/

2 个答案:

答案 0 :(得分:3)

感谢大家的回答。它确实能够在代码中得到解决 即使它不是一个真正的编码问题。

以下是我正在阅读配置详细信息的xml数据文件:

<tsConnection>
<dataSource>megan</dataSource>
<database>Adventure Works DW 2008</database>                
<cube>Adventure Works</cube>
<xmlaUrl><![CDATA[ 
http://localhost/olapbin/msmdpump.dll
 ]]></xmlaUrl>
</tsConnection>

现在在“localTrusted”或“localWithNetworking”设置上,这工作得很好。 即使在“远程”中,它也适用于IE8 Flash播放器。

然而,发生的事情是xmlaUrl被读作:

\n\rhttp://localhost/olapbin/msmdpump.dll

(换行时换行和回车) 这是令人困惑的域名检查和抛出沙箱违规的原因 在“远程”安全沙箱中运行时。

当然,我的xml应该更好,并且可能会有一些忽略白色 代码中的空间处理,但仍然相当奇怪,不一致 来自Netscape兼容浏览器(10.1.x)中Flash播放器代码的行为。

所以最终的工作解决方案如下所示:

<tsConnection>
<dataSource>megan</dataSource>
<database>Adventure Works DW 2008</database>                
<cube>Adventure Works</cube>
<xmlaUrl><![CDATA[http://localhost/olapbin/msmdpump.dll]]></xmlaUrl>
</tsConnection>

我确实成了这个过程中的crossdomain.xml专家。 ;-) 虽然,现在我根本不需要该文件。

如果您看到一些疯狂的无法解释的沙盒违规行为,请记住,检查 您服务网址中的空白区域。

答案 1 :(得分:0)

如果您的DLL后端服务和SWF是从同一个域提供的,则应该允许它。 crossdomain.xml文件中的任何内容都不应该应用。您不必手动加载crossdomain文件。听起来这就是你想要做的事情。

我怀疑你的代码正在发生其他事情。