HTTP POST陷入无限循环,直到超时



我用下面的代码发送了一个POST请求:

var postDatax = new Dictionary<string, string>
                {
                    { "korefor", "new" },
                    { "korename", "Initial" },
                    { "set_instant", "true" },
                    { "set_engine", "google" },
                    { "set_language", "en" },
                    { "set_location", "uk" },
                    { "set_mobile", "false" },
                    { "set_email", "example@mediaworks.co.uk" },
                    { "set_mainurl", "mediaworks.co.uk" },
                    { "set_compurls", "google.com, yahoo.com" },
                    { "koreforname", "Mediaworks" },
                    { "koreforkeywords", "newcastle seo, mediaworks, orm" }
                };
using (System.Net.WebClient wc = new System.Net.WebClient())
    {
        wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
        byte[] byteArrayx = System.Text.Encoding.ASCII.GetBytes(amend(postDatax));
        byte[] byteResultx = wc.UploadData("http://localhost:51378", "POST", byteArrayx);
        string responsex = Encoding.ASCII.GetString(byteResultx);
    }

在运行和调试时,它会卡住并循环,直到超时并崩溃。我不确定为什么会这样。

修改功能:

private static string amend(Dictionary<string, string> postData)
{
    string amended = "";
    foreach (var item in postData)
    {
        amended += "&" + item.Key + "=" + item.Value;
    }
    return amended;
}

触发无限循环的行:

byte[] byteResultx = wc.UploadData("http://localhost:51378", "POST", byteArrayx);

UploadData不在无限循环中,Blocking是不同的。

UploadData正在阻塞,它正在等待另一方,即本场景中的服务器端http://localhost:51378,将响应它。

长时间阻塞可能由于以下问题和其他原因而发生:

  1. 当服务器忙于其他请求时。
  2. 服务器代码需要很长时间来处理您的请求。
  3. 本地或远程防火墙问题。

WebClient。UploadData备注from MSDN

UploadData方法将数据的内容发送到服务器编码。此方法在上传数据时阻塞。继续在等待服务器响应时执行,请使用UploadDataAsync方法。

我强烈建议您用适当的try..catch clause

包装UploadData

最新更新