2015-07-14 6 views
0

Я послал запрос POST, используя этот код:HTTP 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", "[email protected]" }, 
        { "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); 

Любая помощь будет оценена.

+0

Опубликуйте 'amend' функцию, Редактировать текущую запись. –

+0

Что такое «исправлять»? Какая строка вызывает бесконечный цикл? Вы отлаживали его с помощью Fiddler ox аналогичного инструмента, чтобы узнать, что на самом деле отправляется на сервер? –

+1

@AidonHudson, Редактируйте свой пост. –

ответ

1

UploadData не находится в бесконечном цикле, это Blocking, который отличается.

UploadData блокирует, ожидая, пока другая сторона, являющаяся стороной сервера http://localhost:51378 в этом сценарии, ответит на него.

Долгое время блокирования может произойти из-за следующих проблем и по другим причинам, а также:

  1. Когда сервер занят другими запросами.
  2. Код сервера занимает много времени для обработки вашего запроса.
  3. Проблемы с локальным или удаленным брандмауэром.

WebClient.UploadData Заметки из MSDN

Метод UploadData отправляет содержимое данных на сервер без кодирования его. Этот метод блокирует при загрузке данных. Чтобы продолжить выполнение , ожидая ответа сервера, используйте один из методов UploadDataAsync.

Я настоятельно рекомендую вам, чтобы обернуть UploadData с соответствующим try..catch clause

Смежные вопросы