Мне приснился кошмар со следующей проблемой, которую я постарался представить как можно проще, описав простейший тестовый пример, в котором мне удалось воссоздать проблему.
Во-первых, у меня есть приложение ASP.NET.
Во-вторых, у меня есть клиент Flex, который использует HTTPService для доступа к ресурсам на веб-сайте ASP.NET.
сервисы доступны с кодом, подобным этому:
<mx:HTTPService id="rpcTest"
url="{url}"
result="onServiceResult(event)"
method="GET"
resultFormat="text"
useProxy="false"
showBusyCursor="true">
</mx:HTTPService>
В моем приложении Flex есть кнопка, которая делает это:
private function doTest2():void
{
arrMsgs.removeAll();
mgrTest1.loadData(someUrl);
mgrTest2.loadData(someUrl);
mgrTest3.loadData(someUrl);
}
где каждый объект mgrTest * является компонентом MXML, обертывающим HTTPService, как описано выше:
Проблема в том, что нажатие этой кнопки может вызвать следующую ошибку:
[RPC Fault faultString = "ошибка HTTP-запроса" faultCode = "Server.Error.Request" faultDetail = "Ошибка: пузырьки [IOErrorEvent type =" ioError "= ложные отменяемые = ложные eventPhase = 2 text =" Ошибка # 2032: Ошибка потока. URL: http://localhost:50352/Home/About"]. URL: http://localhost:50352/Home/About"]
на mx.rpc :: AbstractInvoker / http://www.adobe.com/2006/flex/mx/internal::faultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:220]
в mx.rpc :: Responder / fault () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ rpc \ src \ mx \ rpc \ Responder.as: 53]
в mx.rpc :: AsyncRequest / fault () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ rpc \ src \ mx \ rpc \ AsyncRequest.as: 103]
в DirectHTTPMessageResponder / errorHandler () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ rpc \ src \ mx \ messaging \ channel \ DirectHTTPChannel.as: 362]
на flash.events::EventDispatcher/dispatchEventFunction ()
на flash.events::EventDispatcher/dispatchEvent ()
на flash.net::URLLoader/onComplete()
Это прерывистое поведение действительно ставит меня в тупик!
Замечания:
1 - Проблема с перебоями. Это часто случается в первый раз, когда я нажимаю кнопку. Это почти никогда не повторяется, если я просто продолжаю нажимать кнопку (т. Е. Все службы работают). Если я подожду 5 минут или около того и снова нажму кнопку, то почти всегда снова происходит сбой.
2 - никогда не случится, если я позвоню только одной службе вместо трех.
3 - в Firefox такого не бывает
4 - Если я попытаюсь использовать Fiddler / Charles для проверки трафика на клиентском компьютере, этого никогда не произойдет.
5 - Кажется, не имеет значения, к какому типу ресурсов я обращаюсь на сайте ASP.NET. (aspx, ashx, xml)
6 - Кажется, не имеет значения, какой формат результата HTTPService установлен.
7 - Мне не удалось воссоздать проблему доступа к ресурсам с сайта, не принадлежащего ASP.NET.
Я боролся с этим в течение нескольких дней, и лучшее, что я придумал, - это использование таймера срабатывания каждые 5 секунд, который использует HTTPService для доступа к простому URL-адресу активности на сервере. По некоторым причинам это, кажется, помогает, но я не уверен, почему, или даже если я могу полагаться на это как решение.
Если кто-нибудь может помочь, я был бы очень благодарен. (У меня неловкая ситуация с потребителем, на которую мне нужно обратиться: - (
Спасибо
Гари Б
Пример заголовков:
HTTP / 1.1 200 OK
Сервер: ASP.NET Development Server / 10.0.0.0
Дата: среда, 15 июня 2011 11:04:09 GMT
X-AspNet-версия: 4.0.30319
X-AspNetMvc-версия: 3.0
Cache-Control: приватный
Content-Type: text / html; кодировка = UTF-8
Длина контента: 921
Подключение: Закрыть
Я взял их у Fiddler, разумеется, когда я использую Fiddler, я никогда не получаю ошибку! Я предполагаю, что заголовки такие же, как если бы Fiddler не был там. Не уверен, смогу ли я добраться до заголовков в Flex.