为什么EndGetResponse抛出ArgumentNullException?

问题描述:

以下代码行在Silverlight中的Chrome和Firefox下引发ArgumentNullException。我正在使用HttpWebRequest将文件发布到服务器。 IE中不会发生异常,只会在我上传较大的文件(5mb)时发生。在IE下它工作得很好。在文档中我没有看到为什么代码会抛出此异常的任何原因。为什么EndGetResponse抛出ArgumentNullException?

//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) 

我完全一样奇怪的错误与HttpWebResponse(但绝对是其他情况)几几天前。 在我的情况下,这是多线程问题。看起来像主线程和工作线程(与委托)之一尝试共享一些变量。所以我可能会建议你尝试将所有的类级变量移入方法体(或者为关键部分添加锁),然后用活动的“线程”窗口调试你的应用程序。
要启用此窗口,请在调试期间单击Debug => Windows => Threads。我希望它能帮助你解决那个奇怪的错误。

我无法到达服务器发出请求时就会收到此异常。这可能是可以理解的,但对于任何长时间运行的请求,我也会看到这个错误,即使我可以通过到达服务器。持续时间超过10秒的请求始终导致客户端因此异常而失败。

它可能与运行Silverlight的环境有关。你声明在IE中,错误不会发生,但它在Firefox和Chrome中。我的应用程序正在运行浏览器外。从这我只能假设客户端堆栈仍然在某些方面利用IE浏览器,如果它在IE中运行。

+0

+1这似乎与我自己的情况一致。 – jv42 2012-02-02 15:14:54