Быстрый HTTP-вызов ASP.Net - PullRequest
3 голосов
/ 06 мая 2011

Я отправляю HTTPWebRequest третьему лицу с кодом ниже. Ответ занимает от 2 до 22 секунд, чтобы вернуться. Третья сторона утверждает, что, получив ее, она немедленно отправляет ответ, и что ни один из ее других партнеров не сообщает о каких-либо задержках (но я не уверен, что верю им - они лгали раньше).

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.example.com");
request.Timeout = 38000;
request.Method = "POST";
request.ContentType = "text/xml";
StreamWriter streamOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(XMLToSend);     // XMLToSend is just a string that is maybe 1kb in size
streamOut.Close();
HttpWebResponse resp = null;
resp = (HttpWebResponse)request.GetResponse();      // This line takes between 2 and 22 seconds to return.
StreamReader responseReader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
Response = responseReader.ReadToEnd();      // Response is merely a string to hold the response.

Есть ли причина, по которой приведенный выше код просто ... сделал бы паузу? Код работает в очень надежном хостинг-провайдере (Rackspace Intensive Segment), и компьютер, на котором он работает, больше ни для чего не используется. Я просто тестирую некоторый код, который мы собираемся запустить в производство. Таким образом, дело не в том, что машина облагается налогом, а учитывая, что это Rackspace и мы платим за лодку, я сомневаюсь, что это и их сеть.

Я просто пытаюсь убедиться, что мой код работает максимально быстро, и что я не делаю глупостей , потому что через несколько недель этот код будет запущен для запуска 20 000 запросов к этой третьей части каждый час.

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Попробуйте сделать флеш, прежде чем закрыть.

streamOut.Flush();
streamOut.Close();

Также загрузите сетевой монитор Microsoft, чтобы убедиться в том, что задержка - это вы или они.

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=983b941d-06cb-4658-b7f6-3088333d062f&displaylang=en

2 голосов
/ 06 мая 2011

Я бы сделал несколько вещей:

  1. Я бы профилировал код, приведенный выше, и получил бы определенное время.
  2. Реализовал операторы using для распоряжения ресурсами.правильно.
  3. Напишите код в асинхронном стиле, будет очень много ожидания ввода-вывода, как только он увеличится.
1 голос
/ 06 мая 2011

Можете ли вы нажать URL в обычном браузере ole?Как быстро это происходит?

Можете ли вы нажать другие URL (не вашего партнера) в этом коде?Как быстро это происходит?

Вполне возможно, что вас укусила «ошибка задержки», когда даже мгновенный ответ вашего партнера приводит к непредсказуемым задержкам с вашей точки зрения.Я заметил https в вашем URL.С http быстрее?

...