Flex crossdomain.xml не работает правильно в Chrome / Firefox? - PullRequest
3 голосов
/ 19 августа 2010

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

Я использую проигрыватель отладки 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.

Восновной журнал ошибок 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;
}   

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

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

Ответы [ 2 ]

3 голосов
/ 21 августа 2010

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

Вот файл данных 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 Player в браузерах, совместимых с 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-адресе службы.

0 голосов
/ 19 августа 2010

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

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

...