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

时间:2015-07-14 12:50:44

标签: c# 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);

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

UploadData正在阻塞,它正在等到另一方(在这种情况下是服务器端http://localhost:51378)将响应它。

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

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

      

    UploadData方法在没有的情况下将数据内容发送到服务器   编码吧。此方法在上载数据时阻止。接着说   在等待服务器的响应时执行,使用其中一个   UploadDataAsync方法。

    我强烈建议您使用适当的UploadData

    包裹try..catch clause