C# POST请求中的随机408错误
我试图向C#中的一个网站发送一个POST请求,然后解析响应中的html以从中获取某些项目名称。然而,在我运行程序的50%时间里,我得到了一个408错误。这是我的代码(大部分来自这里:): 引发的异常: System.dll中发生类型为“System.Net.WebException”的未处理异常 附加信息:远程服务器返回错误:(408)请求超时 通常我会认为有一个简单的解决方案,但由于它只发生在我运行程序的一半时间,它可能会更复杂。每当我听到“某个网络问题在一段时间后发生”,我倾向于查看代码,看是否正确使用了C# POST请求中的随机408错误,c#,asp.net,post,http-status-code-408,C#,Asp.net,Post,Http Status Code 408,我试图向C#中的一个网站发送一个POST请求,然后解析响应中的html以从中获取某些项目名称。然而,在我运行程序的50%时间里,我得到了一个408错误。这是我的代码(大部分来自这里:): 引发的异常: System.dll中发生类型为“System.Net.WebException”的未处理异常 附加信息:远程服务器返回错误:(408)请求超时 通常我会认为有一个简单的解决方案,但由于它只发生在我运行程序的一半时间,它可能会更复杂。每当我听到“某个网络问题在一段时间后发生”,我倾向于查看代码,看
使用块
无论何时使用
块,都应使用
块
WebResponse
、一个Stream
和一个StreamReader
,您正在使用它们,然后您正在完成它们,而您没有进行清理
手动使用Dispose
或Close
调用并不总是足够的。如果代码中抛出异常且未经处理,则将跳过这些异常。使用块将确保清除发生,即使存在未处理的异常。每当我听到“某个或某个网络问题在一段时间后发生”,我都会查看代码并查看使用块是否正确使用
无论何时使用
块,都应使用
块
创建一些资源,然后
使用该资源,以及
以相同的方法完成该资源
(还有其他一些情况,但这是最常见的情况)
在您的代码中,您正在创建一个WebResponse
、一个Stream
和一个StreamReader
,您正在使用它们,然后您正在完成它们,而您没有进行清理
手动使用Dispose
或Close
调用并不总是足够的。如果代码中抛出异常且未经处理,则将跳过这些异常。使用
块的将确保即使存在未处理的异常,也会进行清理。此错误是由于超时造成的。从表面上看,服务器似乎正在超时。所以,我会调查服务器端,看看通话需要多长时间。但是,这可能只是客户端的问题,因为有时在客户端暂停调试器时会出现此错误。也就是说,请求被发送到服务器,服务器返回响应,但客户端不接受。我知道这听起来很有趣,我自己也不知道为什么会这样。无论如何,您可以尝试在客户端的WebRequest中将超时设置为更大的值:
request.Timeout = 60000;
此错误是由于超时造成的。从表面上看,服务器似乎正在超时。所以,我会调查服务器端,看看通话需要多长时间。但是,这可能只是客户端的问题,因为有时在客户端暂停调试器时会出现此错误。也就是说,请求被发送到服务器,服务器返回响应,但客户端不接受。我知道这听起来很有趣,我自己也不知道为什么会这样。无论如何,您可以尝试在客户端的WebRequest中将超时设置为更大的值:
request.Timeout = 60000;
从互联网上复制代码时要小心,即使是从MSDN上。它是为了说明作者想要说明的内容,而不是作为一个好的、专业的代码示例。在您发布的代码中,流
、WebResponse
和StreamReader
都需要使用块。尝试一下,看看它是否解决了问题。您可能正在耗尽资源,因为您没有在所有情况下进行清理(例如,如果引发异常)。检查此问题,可能与您的@JohnSaunders有关。如果这是您的意思,我在代码开头使用了语句,但除此之外,我不确定我是否真正理解您所说的内容(对不起,我是C#的新手。请参见“”@JohnSaunders谢谢,这非常有效。从互联网上复制代码时要小心,即使是从MSDN上。它是为了说明作者想要说明什么,而不是作为一个好的专业代码的例子。在你发布的代码中,流
、网络响应
和流阅读器
都需要在使用
块。尝试一下,看看它是否解决了问题。可能是因为没有在所有情况下进行清理(例如,如果引发异常),导致资源耗尽。检查此问题,可能与您的@JohnSaunders有关。如果这是您的意思,我在代码开头使用了语句,但除此之外,我不确定我是否真正理解您的意思(对不起,我是C#新手)。请参见“”@JohnSaunders谢谢,这非常有效。从互联网上复制代码时要小心,即使是从MSDN上。它是为了说明作者想要说明什么,而不是作为一个好的专业代码的例子。在你发布的代码中,流
、网络响应
和流阅读器
都需要在使用
块。尝试一下,看看它是否解决了问题。可能是因为没有在所有情况下进行清理(例如,如果引发异常),导致资源耗尽.检查此问题,可能与您的@JohnSaunders有关。如果您的意思是,我在代码开头使用了语句,但其他