Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# POST请求中的随机408错误_C#_Asp.net_Post_Http Status Code 408 - Fatal编程技术网

C# POST请求中的随机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)请求超时 通常我会认为有一个简单的解决方案,但由于它只发生在我运行程序的一半时间,它可能会更复杂。每当我听到“某个网络问题在一段时间后发生”,我倾向于查看代码,看

我试图向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有关。如果您的意思是,我在代码开头使用了
    语句,但其他