我正在测试我在Windows 2003服务器上的C#(Visual Studio 2015)中编写的Web服务应用程序。该应用程序运行良好,但是当我运行的代码行:“未设置为一个对象的实例对象引用”HttpWebRequest.GetResponse()抛出untrappable错误
WebResponse webResponse = request.GetResponse();
其中请求是HttpWebRequest的情况下,应用程序将引发
在大家告诉我去研究那个错误之前,我有。这里没有意义。 HttpWebRequest当然不是null,我可以在程序崩溃之前访问它的属性,如URL和UserAgent。更奇怪的是,这段代码被封装在一个try..catch中,用于捕获网络异常和一般异常。我不知道为什么它没有陷入这个问题。
但是它发生的原因是因为如果我在Internet Explorer(这个旧服务器上的版本8.0)尝试URL,我得到一个“Internet Explorer无法显示网页”的错误。我甚至无法登录到我希望访问的网站。 Firefox工作正常,但我不知道如何强制HttpWebRequest“成为”Firefox(已将UserAgent设置为标准Mozilla字符串...)。
如果这个旧服务器上的Web请求层不起作用(顺便说一下.NET版本是3.5),那很好。但我希望能够捕捉错误。为什么我的try..catch工作并没有任何人知道什么会使这个非常简单的代码(在其他地方工作)抛出一个空对象错误?
在此先感谢任何人可以提供的见解 - 非常感谢!
补充: 这里是整个在try..catch:
try
{
HttpWebRequest request = GenerateWebRequest(pcMethodName, pcCommand, pcHTTPMethod);
MessageBox.Show(request.RequestUri.ToString());
WebResponse webResponse = request.GetResponse();
MessageBox.Show("The above line worked!");
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
lcResult = reader.ReadToEnd();
}
catch (WebException wex)
{
lcResult = "ERROR (web exception): " + Environment.NewLine + new StreamReader(wex.Response.GetResponseStream()).ReadToEnd();
}
catch (Exception ex)
{
lcResult = "ERROR (general exception): " + Environment.NewLine + ex.Message;
}
应该不是最终捕捉陷阱任何一般例外?要清楚,我看到的错误是在RUN-TIME - 我无法在此机器上进行调试,因为它没有Visual Studio(并且这不是一个选项)。所以,我不知道这个过程认为是空的。我怎么能找到这个?我知道,行的原因:
WebResponse webResponse = request.GetResponse();
的问题是因为我把每一行之间的消息框,直到我发现了什么系炸毁。在应用程序崩溃时,将“调试”版本的exe放在播放器中会提供更多的调试信息吗? (注意:调试版本的EXE似乎没有提供任何更多的信息,而且我也不能添加NullReferenceException
,因为编译器说前面的“catch”已经陷入了这个陷阱......但它却没有。)。
你可以发布你的try..catch?如果你捕捉到“网络异常和一般异常”,你是否会捕获NullReferenceExceptions? 另外,当你抓住webexception你有没有抽出回应,服务器告诉你什么? – garyamorris
什么是VS告诉你是空的? –
“异常”的一般捕获将捕获NRE @garyamorris。除非我误解了你的评论 –