gpt4 book ai didi

C# HTTP Post代码导致工作进程挂起

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:10:39 30 4
gpt4 key购买 nike

我们在 IIS 中查看工作进程时一直注意到请求挂起,我们最初认为指定 HTTP 超时值可以解决问题,但事实并非如此。我们找到了导致问题的代码段,但我们仍然不确定是什么导致了它。

以下代码接受键/值对列表并创建 HTTP Post 请求并将值放入 POST 负载中。它在大多数情况下工作正常,但不确定是什么导致了问题。

    public List<KeyValuePair<string, string>> Data { get; set; }

public string Invoke()
{
StringBuilder paramBuilder = new StringBuilder();

for (int i = 0; i < Data.Count; i++)
{
var d = Data[i];
string delimeter = i < Data.Count - 1 ? "&" : string.Empty;
paramBuilder.AppendFormat("{0}={1}{2}", d.Key.Trim(), d.Value != null ? HttpUtility.UrlEncode(d.Value.Trim()) : string.Empty, delimeter);
}

WebRequest request = WebRequest.Create(Url);
request.ContentLength = paramBuilder.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";

Stream rs = request.GetRequestStream();
ASCIIEncoding encoding = new ASCIIEncoding();
var postData = encoding.GetBytes(paramBuilder.ToString());
rs.Write(postData, 0, postData.Length);

var response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string str = reader.ReadToEnd();

rs.Close(); //JUST ADDED _ MAYBE THESE WERE THE PROBLEM?
reader.Close(); //JUST ADDED - MAYBE THESE WERE THE PROBLEM?

return str;
}

任何想法都会有所帮助。

谢谢

最佳答案

您可能资源不足。无论何时创建实现 IDisposable 的对象实例,都应将其包装在“using”语句或 try/finally block 中。如果不这样做,将导致您的应用程序挂起,直到资源被释放。

这将确保当您离开方法的范围时,资源得到妥善管理和释放。

http://msdn.microsoft.com/en-gb/library/yh598w02(v=vs.100).aspx

在你的情况下,你应该换行 流 rs = request.GetRequestStream();和 StreamReader reader = new StreamReader(response.GetResponseStream());这样你就不会泄漏资源。

此外,将您的代码包装在 try/catch block 中并记录异常,以便分析错误。

关于C# HTTP Post代码导致工作进程挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15708223/

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