【问题标题】:HttpWebRequests Failing on Subsequent CallsHttpWebRequests 在后续调用中失败
【发布时间】:2014-01-08 18:59:14
【问题描述】:

我知道这是一个模糊的问题,特别是因为我没有提供任何代码,但我正在开发一个 .Net 2.0 应用程序,并且我们有一个 WebRequest 可以将数据发布到内部构建的 API。

奇怪的事情发生在我们的第三个(并且总是第三个)后续请求中,它在请求的 GetRequestStream() 方法处失败。第一次和第二次调用,一切都很好。第三次,它挂了一会儿,最终超时。

内部的其他应用程序正在调用 API,因此我们知道这不是服务器端或网络问题。我们已经在几台机器上进行了尝试——所有这些机器都有同样的问题。以前有没有人遇到过这个问题,或者有没有人对如何调试有任何建议(因为响应对象没有产生任何东西,或者至少没有任何用处)。

【问题讨论】:

    标签: c# api .net-2.0 httpwebrequest webrequest


    【解决方案1】:

    如果您不处理 WebResponse,通常会发生这种情况。从客户端到同一台机器的连接数有一个限制,默认情况下是两个。如果关闭 WebResponse,则可以重用(或关闭)连接。 using 语句在这里是你的朋友:

    WebRequest request = [...];
    // Do stuff with the request stream here (and dispose it)
    using (WebResponse response = request.GetResponse())
    {
        // Stuff with the response
    }
    

    【讨论】:

    • 嗯,实际上不是。它是同样的问题。它通过告诉请求使用 HTTP 1.0 而不是 1.1 来“解决”。见这里:stackoverflow.com/a/8384691/178143
    • @Ted:它可能有相同的症状,但如果处理响应为 OP 解决了它但没有为你解决它,这表明它不是同一个潜在问题。
    • 也许 =) 无论如何,这是一个非常奇怪的错误...谢谢回复 =)
    【解决方案2】:

    是的,你完全正确。没有正确处理响应。我们一直把它留给垃圾收集器,你猜对了,它没有被及时收集。不幸的是,我关闭了浏览器并忘记阅读任何答案(你觉得我有多愚蠢),问题就解决了。

    今晚我学到了两件事。 1、妥善处理你的WebRequests;和 2,更加注意堆栈溢出的答案!

    【讨论】:

    • 主要是从不依赖垃圾收集器来完成实现 IDisposable 但你不知道安全的东西(例如 MemoryStream) .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多