Flex crossdomain.xml не работает правильно в Chrome / Firefox?

Я потратил на это довольно много времени, так что вот где я застрял.

Я использую отладчик 10.1, чтобы получить запрос XMLA от:

http://localhost/dir/blah.swf

to:

http://localhost/olapbin/msblah.dll

Это нормально работало в файловой системе, но теперь на веб-сервере IIS7.

После долгой возни с файлом 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.

В основном журнале ошибок гибкости я получаю:

*** 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;
}   

Спасибо за вашу помощь ... надеюсь, что это поможет другим, когда это будет исправлено. ;-)

Шон http://www.vidgridz.com/


person blissweb    schedule 19.08.2010    source источник


Ответы (2)


Спасибо за все ответы. Ее действительно можно было решить в коде, даже если это не совсем настоящая проблема кодирования.

Вот файл данных 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 должен был быть лучше и, возможно, добавить в код некоторую обработку игнорирования пробелов, но все же это довольно странное, непоследовательное поведение кода проигрывателя Flash в браузерах, совместимых с Netscape (10.1.x).

Итак, окончательное рабочее решение выглядит так:

<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. ;-) Хотя сейчас файл мне совсем не нужен.

Имейте это в виду, если вы видите какие-то безумные необъяснимые нарушения песочницы, проверьте наличие пробелов в URL-адресе вашей службы.

person blissweb    schedule 21.08.2010

Если ваша внутренняя служба DLL и SWF обслуживаются из одного домена, это должно быть разрешено. Ничего из файла crossdomain.xml не должно применяться. Вам также не придется загружать кроссдоменный файл вручную. Похоже, это то, что вы пытаетесь сделать.

Я подозреваю, что с вашим кодом что-то еще происходит.

person JeffryHouser    schedule 19.08.2010
comment
Я понимаю, что ему не нужен файл crossdomain.xml. Я также понимаю, что его не нужно загружать вручную. Однако это, по крайней мере, заставило кое-что работать в IE, чтобы я почувствовал себя лучше. Что бы ни происходило, мне это кажется недокументированным, нежелательным волшебством ;-) Я приложил еще код. Следующее, что нужно попробовать, - это стандартный (не отлаживаемый) проигрыватель Flash, а затем более старую версию. - person blissweb; 20.08.2010
comment
Вы используете Flex? Если да, то почему вы не используете тег WebService? Похоже, ты делаешь тяжелый путь. - person JeffryHouser; 20.08.2010