Почему EndGetResponse создает исключение ArgumentNullException? - PullRequest
5 голосов
/ 25 июля 2010

Следующая строка кода генерирует исключение ArgumentNullException для Chrome и Firefox в silverlight.Я использую HttpWebRequest для отправки файла на сервер.Исключение не происходит в IE и происходит только тогда, когда я загружаю файл большего размера (5 МБ).Под IE работает просто отлично.В документации я не видел причин, по которым код генерировал это исключение.

//note that asyncResult is not null
response = (HttpWebResponse)request.EndGetResponse(asyncResult);

Вот трассировка стека из исключения:

at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)

и внутреннего исключения:

at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at DC.FileUpload.FileUpload.<>c__DisplayClassc.<UploadFileEx>b__a(IAsyncResult asyncResult)

Ответы [ 2 ]

1 голос
/ 06 января 2011

Я получаю это исключение каждый раз, когда не могу добраться до сервера, чтобы сделать запрос. Это может быть понятно, но я также вижу эту ошибку для любых длительных запросов, даже когда я могу добраться до сервера. Запросы, которые занимают более 10 секунд, последовательно приводят к сбою клиента с этим исключением.

Возможно, это связано со средой, в которой работает Silverlight. Вы утверждаете, что в IE ошибка не возникает, а в Firefox и Chrome. Мое приложение работает вне браузера. Из этого я могу только предположить, что клиентский стек все еще использует IE в некотором роде, если он работает в IE.

1 голос
/ 30 июля 2010

Я получил точно такую ​​же странную ошибку с HttpWebResponse (но при совершенно других обстоятельствах) несколько дней назад. В моем случае это была проблема многопоточности. Похоже, основной поток и один из рабочих потоков (с делегатом) пытается разделить некоторую переменную. Поэтому я могу предложить вам переместить все переменные уровня класса в тела методов (или добавить блокировку для критических секций), а затем отладить приложение с активным окном «Потоки». Чтобы включить это окно, нажмите Отладка => Windows => Потоки во время отладки. Надеюсь, это поможет вам в борьбе с этой странной ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...