gpt4 book ai didi

c# - HttpWebRequest 突然停止工作,几次请求后没有收到响应

转载 作者:太空狗 更新时间:2023-10-29 21:34:49 27 4
gpt4 key购买 nike

我正在使用 WPF .net 4.0 应用程序。我有一个搜索栏。对于每个搜索 token ,我需要对 8 个单独的 URL 执行 8 个 http 请求才能获得搜索结果。一旦用户停止在搜索栏中输入,我会在 400 毫秒后向服务器发送 8 个请求。搜索 6 到 7 个搜索 token 结果非常好。但在那之后突然 HttpWebRequest 停止静默工作。没有抛出异常,也没有收到任何响应。我正在使用 Windows 7,我也禁用了防火墙。后面的http请求不知道哪里丢了。

任何人都可以告诉我如何解决这个问题吗?

下面是我调用 HttpWebRequest 的代码。

public static void SendReq(string url)
{
// Create a new HttpWebRequest object.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.ContentType = "application/x-www-form-urlencoded";
request.Proxy = new WebProxy("192.168.1.1", 8000);

// Set the Method property to 'POST' to post data to the URI.
request.Method = "POST";

// start the asynchronous operation
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);

}

private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

// End the operation
Stream postStream = request.EndGetRequestStream(asynchronousResult);

string postData = this.PostData;

// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postData);

// Write to the request stream.
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();

// Start the asynchronous operation to get the response
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}

private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

// End the operation
using(HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
{
using(Stream streamResponse = response.GetResponseStream())
{
using(StreamReader streamRead = new StreamReader(streamResponse))
{
string responseString = streamRead.ReadToEnd();
Debug.WriteLine(responseString);
}
}
}
}

最佳答案

我想我来晚了,但我还是想回答你的问题,也许对其他人有帮助。默认情况下,您发出的 HTTP 请求是 HTTP 1.1 请求。 HTTP 1.1 请求默认有 Keep-Alive 连接。因此,当您对同一台服务器发出太多请求时,.net 框架只会使 x 不。的要求。

您应该通过response.Close() 关闭所有响应

您还可以指定可以同时发出多少个请求。

ServicePointManager.DefaultConnectionLimit = 20;

请注意,您必须在发出第一个请求之前设置 DefaultConnectionLimit。你可以找到更多信息 here on msdn .

关于c# - HttpWebRequest 突然停止工作,几次请求后没有收到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13986392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com