Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Не работает loadPolicyFile (http://www.flasher.ru/forum/showthread.php?t=120646)

marat_sa 27.01.2009 09:29

Не работает loadPolicyFile
 
Есть проблема с загрузкой\использованием политик безопасности. Имеем: тест-клиент (код см. ниже) и сокет-сервер. В задачу сокет-сервера входит ответ на запрос политики безопасности и дальнейшее взаимодействие с клиентом по сокету.

Код клиента:
Код AS1/AS2:

var connVars:LoadVars = new LoadVars();
var loginServer:XMLSocket;
 
connVars.onLoad = function (success:Boolean) {
 if (success) {
  System.security.loadPolicyFile(connVars["policyFile"]);
  loginServer = new XMLSocket();
  loginServer.onConnect = onConnectLoginServer;
  loginServer.connect(connVars["host"], connVars["port"]);
 }
};
connVars.load("app.conf");
 
function onConnectLoginServer(success:Boolean) {
 trace("onConnectLoginServer() Success = " + success);
 //Передача данных
}

Содержимое возвращаемой сервером политики-безопасности для простоты разбирательства:
Код:

<cross-domain-policy>
 <allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>

Если сокет-сервер отвечает на запрос-политики в течение 3х секунд - все хорошо. Политика передается, общение по сокету начинается. Вот лог policyfiles.txt успешного соединения:
Код:

ОК: Выполнена загрузка SWF-файла корневого уровня: http://**********************.swf
ОК: Выполняется поиск директив <allow-access-from> в файлах политики, чтобы авторизовать загрузку данных из ресурса по адресу xmlsocket://xxx.yyy.ru:port инициатором запроса из http://**********************.swf
ОК: Файл политики принят: xmlsocket://xxx.yyy.ru:port
ОК: Запрос ресурса на xmlsocket://xxx.yyy.ru:port  источника запроса из http://**********************.swf разрешен согласно файлу политики на xmlsocket://xxx.yyy.ru:port

Если сокет-сервер НЕ отвечает на запрос-политики в течение 3х секунд - все плохо. Сервер передает политику (допустим через 10 секунд), но клиенту это уже не важно - по непонятной причине вступает в действие таймаут флэшплеера, хотя этого не должно происходить, потому что я использую loadPolicyFile() (выдержка из доков Адоба: When Flash Player requests socket policy files by default, it waits only 3 seconds for a response ... WHEN YOU CALL LOADpOLICYfILE RATHER THAN ALLOWING fLASH pLAYER TO CHECK LOCATIONS BY DEFAULT, fLASH pLAYER WILL WAIT AS LONG AS NECESSARY FOR A RESPONSE FROM A SOCKET POLICY FILE SERVER, RATHER THAN TIMING OUT AFTER 3 SECONDS.).

Вот лог policyfiles.txt НЕуспешного соединения:
Код:

ОК: Выполнена загрузка SWF-файла корневого уровня: http://**********************.swf
ОК: Выполняется поиск директив <allow-access-from> в файлах политики, чтобы авторизовать загрузку данных из ресурса по адресу xmlsocket://xxx.yyy.ru:port инициатором запроса из http://**********************.swf
Предупреждение: На xmlsocket://xxx.yyy.ru:843 истекло время (3 сек) ожидания файла политики для сокета. Это не должно привести к каким-либо проблемам, однако см. описание на веб-сайте http://www.adobe.com/go/strict_policy_files_ru.
Предупреждение: На xmlsocket://xxx.yyy.ru:port истекло время (3 сек) ожидания файла политики для сокета. Это не должно привести к каким-либо проблемам, однако см. описание на веб-сайте http://www.adobe.com/go/strict_policy_files_ru.
Ошибка: Запрос ресурса на xmlsocket://xxx.yyy.ru:port  источника запроса из http://**********************.swf отклонен из-за отсутствия разрешений в файле политики.

Кто нибудь с этим сталкивался?
Проверяется это очень легко - перед возвратом сервером ответа на запрос политики безопасности вставить например sleep(10 sec);

terbooter 09.07.2009 10:31

У меня проблема еще запущенее.
Настроил логи политики безопасности

Цитата:

ОК: Выполнена загрузка SWF-файла корневого уровня: file:///C|/terbooter/testXMLSocket/bin/xmlsocket.swf
В логи выводит
Цитата:

connectHandler: [Event type="connect" bubbles=false cancelable=false eventPhase=2]
closeHandler: [Event type="close" bubbles=false cancelable=false eventPhase=2]

через какое-то время
securityErrorHandler: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Нарушение изолированной среды: file:///C|/terbooter/testXMLSocket/bin/xmlsocket.swf не может загрузить данные из 192.168.0.5:4242."]
порт 4242 точно, открыт.
порт по которому пытаюсь грузить политику безопасности тоже открыт.
Меня смущает отсутствие в файле лога политики безопасности предупреждения что не могу загрузить файл политики безопасности.

Добавлено через 1 минуту
На сервере не можем отловить запроса о загрузке политики безопасности.
Обычный запрос приходит

marat_sa 09.07.2009 14:09

некропостер =)

1) А что пытаешься сделать? Напиши поподробнее плиз
2) Почему локальные тесты? Попробуй в сети нормально потестить.
3) Проверь crossdomain.xml

terbooter 20.07.2009 14:58

Проблема была в другом.
Не понятно почему XMLSocket коннектился, посылал данные на сервер, но не получал их. (Вот я и подумал что проблема с файлом политики безопасности)

Затем я просто заменил на обычный Socket и все заработало.

А лог не писался, потому что Local Security Sandbox и так все позволяет,
поэтому флэшплеер не грузит файл политики.


Часовой пояс GMT +4, время: 00:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.