我在这方面花了很多时间,所以这就是我陷入困境的地方。
我正在使用调试播放器 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 运行同样的东西时,它不会出现。 知道发生了什么事吗??
根据要求...更多代码
主要发送请求:
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;
}
感谢您的帮助...希望修复后对其他人有帮助。 ;-)
最佳答案
谢谢大家的回答。确实可以在代码中解决 即使这不完全是一个真正的编码问题。
这是我从中读取配置详细信息的 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 专家。 ;-) 不过,现在我根本不需要该文件。
请记住,如果您看到一些疯狂且无法解释的沙盒违规行为,请检查是否有 您的服务网址中存在空格。
关于apache-flex - Flex crossdomain.xml 在 Chrome/Firefox 中无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3519035/