2009-09-29 2 views
3

В Flex 3 приложения я использую HTTPService класс для выполнения запросов к серверу:Flex: запрос HTTP Ошибка # 2032

var http:HTTPService = new HTTPService(); 
http.method = 'POST'; 
http.url = hostUrl; 
http.resultFormat = 'e4x'; 
http.addEventListener(ResultEvent.RESULT, ...); 
http.addEventListener(FaultEvent.FAULT, ...); 
http.send(params); 

Приложение имеет Comet-архитектуру. Таким образом, он выполняет длительные запросы. Ожидая ответа на этот запрос, другие запросы могут быть сделаны одновременно.

Приложение работает в большинстве случаев. Но иногда некоторые клиенты получают ошибку HTTP-запроса, выполняющую длительный запрос:

faultCode:Server.Error.Request 
faultString:'HTTP request error' 
faultDetail:'Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: http://example.com/ws' 

Я думаю, что это зависит от браузера пользователя.

Любые идеи?

ответ

1

У меня возникла такая же проблема, когда я отправил более длинный параметр (3-4K!) В HttpRequest. Как только я отправил более мелкие, он работал (без обновления, перезагрузки или чего-то еще). Я не знаю, есть ли ограничение на стороне клиента или на стороне веб-сервера длины параметров, которые вы можете отправить, но определенно это вызывает проблему.
url limitations may cause it

0

Похоже, что у вас может быть больше подключений, которые поддерживаются браузером. Знаете ли вы, сколько открытых соединений существует во время ошибки?

Различные браузеры позволяют разное количество одновременных открытых соединений. IE 6,7,8 все допускают различные суммы: http://support.microsoft.com/kb/282402

Firefox: http://www.speedguide.net/faq_in_q.php?qid=231

1

Эта ошибка появляется очень общие, и я хотел бы предложить, пытаясь собрать больше информации и сравнялась по вопросу.

  • This post похоже похоже на вашу ситуацию.
  • This post может помочь найти более подробную информацию отладчика, которая будет полезна.
  • Какие клиенты затронуты?
  • Можете ли вы записать код статуса http или трафик, отправляемый с помощью Charles, Wireshark или аналогичный?
1

Попробуйте слушать для HTTP-статус запроса, используя flash.events.HTTPStatusEvent.HTTP_STATUS
Это может дать вам больше информации о том, что происходит не так.

+0

также попробовать flash.events.HTTPStatusEvent.HTTP_RESPONSE_STATUS это ты в прямом эфире –

1

я собирался открыть еще один вопрос по существу ту же тему, но я думаю, две безответные вопросы хуже, чем 1.

я получаю такой же прерывистый выпуск от некоторых пользователей приложения Flex у нас есть, но с некоторые немного разные симптомы. Полный спектр информации, которую я могу предоставить, составляет:

  1. Это происходит на коротких (10 мс) запросах.
  2. Это происходит случайно.
  3. Соединение по SSL.
  4. Это происходит только для пользователей IE, а не для пользователей, использующих FireFox.
  5. Как только это происходит, пользователи сообщают мне, что им нужно отключить IE и перезапустить его (некоторые пользователи говорят, что они должны перезагружаться, но я думаю, что это менее вероятно, чем перезапуск IE). Кажется, требуется несколько минут, чтобы перезагрузить себя.
  6. Он, похоже, не влияет на остальную часть интернет-соединения пользователя - они могут продолжать использовать другие окна IE.
  7. Как только это произойдет, похоже, что запрос HTTPService из приложения flex не будет работать.
  8. Это происходит (по-видимому) только для небольшого подмножества пользователей. Первоначально это , казалось, было связано с их физическим расстоянием от основного сервера, но это уже не , как представляется, обязательно (хотя это может быть качество соединения).
  9. Я не понимаю, какая версия Adobe Flash работает. Код был создан с использованием Adobe Flex 3.4 (linux)
  10. Приложение выполняет широкий спектр запросов, многие из которых параллельны, хотя я не смог воспроизвести проблему.
  11. Пользователи рекомендуют эту ошибку после того, как они вернулись к приложению через несколько минут.
  12. В журналах сервера не существует соответствующей записи запроса на сервер, предлагая, чтобы запрос никогда не доходил до сервера (возможно, никогда не покидая клиента).
  13. Сервер отвечает на все запросы соответствующими заголовками кеша, чтобы включить кеширование IE.

Текущее решение проблемы заключается в том, чтобы попросить пользователей запустить приложение в FireFox. не

Полный дамп ошибки:

HTTP Status Code: null 
Fault Code: Server.Error.Request 
Fault Error ID: null 
Fault Detail: Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: https://my.server/url 
Fault String: HTTP request error 
Fault Name: Error 
Fault Message: faultCode:Server.Error.Request faultString:'HTTP request error' faultDetail:'Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]. URL: https://my.server/url' 
Root Cause: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"] 

Многие люди упоминали ошибка 2032, а некоторые даже упомянуть периодические ошибки только под IE, но нет упоминаний решения. Если я когда-нибудь найду его, я обновлю свой пост.

Update

После разговора с пользователем, как это произошло, мы обнаружили следующее:

  1. Пользователь может открыть новую вкладку в IE, и загрузить то же гибкое приложение вверх штраф - поэтому нет проблем с подключением к Интернету.
  2. Пользователь может на вкладке с приложением flex, где возникает ошибка, загрузить google.com - так что проблема связи не связана с этой конкретной вкладкой.
  3. Пользователь может скопировать адрес со вкладки с сломанным приложением на другую вкладку, и приложение flex будет загружаться.
  4. Пользователь может после загрузки google.com на вкладке, где сломалось приложение flex, снова скопировать URL-адрес приложения flex и сразу же получить эту проблему.

Похоже, что в моем приложении приложение my flex может сломать Flash-плагин/виртуальную машину до такой степени, что после перерыва дальнейшие запросы к URL-адресу не разрешены.

Я настолько полностью в тупике от этого, что я предлагаю пользователям использовать FireFox или обернуть приложение в пакет Air.

0

У меня была эта точная проблема в моем приложении Air. В конце концов я понял, что случайно установил urlrequest.idleTimeout в 10. Этот тайм-аут на самом деле в миллисекундах, и мой веб-сервер является локальным, поэтому, если бы я не отправил никакие параметры (не получить или отправить) на мой локальный сервер, он будет работать. Всякий раз, когда я отправлял какие-либо параметры вместе с запросом, конечно, он терпел неудачу, потому что мой сценарий занимал более 10 мс для запуска и возврата данных.

Возможно, вы захотите обратить внимание на медленные сценарии загрузки. Вы можете отлаживать, просто форсируя некоторый статический вывод, а затем прекратите выполнение этой страницы. На моей странице php я размещаю:

<?php 
echo "hello=hi"; 
die(); 
?> 

Также не забудьте отладить его в пределах ограничений песочницы. Я использую самоподписанный сертификат ssl, и при попытке подключиться к локальному тестовому веб-серверу существует много предупреждений.

Надеюсь, что это поможет!

1

У меня была такая же проблема здесь, но с применением Flash (Web-Flex 4.1 SDK). после опробования огромного ассортимента решений, которые мы сузили, мы, наконец, придумали тот, который работает довольно надежно для всех систем, включая недавно установленные машины.

A. добавьте глобальные прослушиватели событий в корневой (или этап) приложения, на этапе preinitialize flex.

IOErrorEvent.IO_ERROR 
IOErrorEvent.NETWORK_ERROR 
HTTPStatusEvent.HTTP_STATUS 
ErrorEvent.ERROR 
SecurityErrorEvent.SECURITY_ERROR 

если ошибка Cought - event.preventDefault();

B. добавить обработчики событий на каждый погрузчик используется в App для следующих ошибок:

IOErrorEvent.IO_ERROR 
SecurityErrorEvent.SECURITY_ERROR 
HTTPStatusEvent.HTTP_STATUS 

* попытки восстановления, как падение назад на внешний интерфейс вызова ...

C. поместите все файлы SWZ из папки bin-release вместе с SWF-файлом в тот же путь на сервере, который вы используете для доставки вашего приложения. в моем случае это файлы, необходимые:

sparkskins_4.5.1.21328.swz 
spark_4.5.1.21328.swz 
textLayout_2.0.0.232.swz 
rpc_4.5.1.21328.swz 
osmf_1.0.0.16316.swz 
framework_4.5.1.21328.swz 

*, чтобы обнаружить это я использовал Chrome консоль разработчика, чтобы увидеть, какие ошибки возникают на странице и обнаружил цепочку 404-х, когда приложение пытается загрузить эти файлы.

D. иметь правильно настроенный файл политики crossdomain.xml, который включает метку HTTP-запроса allow http.

<allow-http-request-headers-from domain="*" headers="*"/> 

заменить * по мере необходимости в вашем конкретном случае.

Приветствия

Смежные вопросы