Почему первый запрос, который я делаю с объектом WebClient, всегда занимает 15 секунд? - PullRequest
0 голосов
/ 07 ноября 2010

Я говорю о POST-запросах, используя:

WebClient wc = new WebClient();
String result = wc.UploadString("http://example.com/", "data=hello, world!");

Редактировать: Это мой настоящий код прямо сейчас:

String result;
using (WebClient wc = new WebClient())
{
    result = wc.UploadString("http://" + "pastebin.com/api_public.php", "POST", "paste_code=" + LongDataEscape(Clipboard.GetText()));
}

И если вывас интересует LongDataEscape:

    public String LongDataEscape(String Str)
    {
        String Output = "";
        int ByteCount = 32766;
        if (Str.Length > ByteCount)
        {
            for (int i = 0; i < Str.Length; i+= ByteCount)
            {
                if (Str.Length - i < ByteCount)
                    Output += Uri.EscapeDataString(Str.Substring(i, Str.Length - i));
                else
                    Output += Uri.EscapeDataString(Str.Substring(i, ByteCount));
            }
        }
        else
            Output = Uri.EscapeDataString(Str);
        return Output;
    }

При первом выполнении вышеуказанного фрагмента кода это всегда занимает около 15 секунд (хорошо, может быть, 10), независимо от того, к какому веб-сайту это относится, но одни и те же фрагменты кодаследующие следуют просто мгновенно.

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

Ответы [ 2 ]

4 голосов
/ 08 ноября 2010

Я исправил это.

Когда вы создаете новый объект WebClient (также FtpWebRequest), вы должны установить для свойства "Proxy" его значение null.Например:

WebClient wc = new WebClient();
wc.Proxy = null;

Тогда первый запрос никогда не займет много времени, и у вас не возникнет проблем.

0 голосов
/ 07 ноября 2010

Первый звонок часто занимает больше времени, чем последующие, однако 15 с - это слишком много.

Попробуйте внести следующее изменение:

using(WebClient wc = new WebClient())
{
    String result = wc.UploadString("http://example.com/", "data=hello, world!");
}
...