Приложение на базе Windows для тестирования моего приложения ASP.NET

Я хочу подчеркнуть свой сайт с множественным доступом. Для этого я создал приложение на базе Windows, которое 1000 раз вызывает веб-сайт. К сожалению, он работает только на 2 звонка. Это код:

    static void myMethod( int i)
    {
        int j = 0;

        try
        {
            string url = "";
            WebRequest wr = null;
            HttpWebResponse response = null;                                
            url = String.Format("http://www.google.com");
            wr = WebRequest.Create(url);
            //wr.Timeout = 1000;
            response = (HttpWebResponse)wr.GetResponse();                
            MessageBox.Show("end");
        }
        catch (Exception ex)
        {
            MessageBox.Show(j.ToString() + "   " + ex.Message);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 1000; i++)
        {
            ThreadStart starter = delegate { myMethod(i); };
            Thread thread = new Thread(starter);
            thread.Start();               
        }

    }

person user422688    schedule 13.01.2012    source источник
comment
Что происходит после двух попыток? Возникает ли какое-либо исключение?   -  person granaker    schedule 13.01.2012
comment
Вы знаете, что если бы это сработало, вы бы создали 1000 ящиков сообщений, верно? Также - я не уверен, разрешено ли вам открывать окно сообщений из фоновой беседы. Кто-нибудь может это подтвердить?   -  person Øyvind Bråthen    schedule 13.01.2012
comment
Зачем пытаться заново изобретать то, что уже доступно. support.microsoft.com/kb/231282 loadimpact.com   -  person Lloyd    schedule 13.01.2012
comment


Ответы (3)


Лучше используйте Бесплатный инструмент WCAT для нагрузочного тестирования страницы ASP.NET.

Также просмотрите это видео [Как мне:] Тестировать нагрузку веб-приложения

Если у вас Visual Studio 2010 Ultimate, см. ссылка

Надеюсь, это поможет.

person Dirk Strauss    schedule 13.01.2012

По умолчанию HttpRequest разрешает только два соединения с одним и тем же хостом. Вы можете изменить это, установив свойство DefaultConnectionLimit .

person Joe    schedule 13.01.2012
comment
Верно. Причина, по которой OP так неожиданно сталкивается с ограничением количества подключений, заключается в том, что они не закрывают / не удаляют ответы и, следовательно, оставляют открытые (но не упоминаемые) подключения в ServicePoint, которые будут закрыты только при появлении GC. Это также довольно грубо по отношению к другому концу соединения ... вешать соединение, не прочитав ответ, а затем незамедлительно закрывать соединение. - person spender; 13.01.2012

Прежде чем продолжить, попробуйте удалить экземпляры IDisposable (т. Е. Ответ).

static void myMethod( int i)
{
    int j = 0;

    try
    {

        string url = String.Format("http://www.google.com");
        WebRequest wr = WebRequest.Create(url);
        using(HttpWebResponse response = (HttpWebResponse)wr.GetResponse())
        using(Stream responseStream = wr.GetResponseStream())
        {
            //handle response / response stream
        }                
        MessageBox.Show("end");  //this won't scale!!!
    }
    catch (Exception ex)
    {
        MessageBox.Show(j.ToString() + "   " + ex.Message);
    }
}
person spender    schedule 13.01.2012
comment
В этом изменении нет никакого смысла. - person Tamilmaran; 13.01.2012
comment
@WAPGuy: Правда? Что для вас не имеет смысла? Оставить GC для инициирования закрытия ответа на запрос - это хорошая идея? - person spender; 13.01.2012
comment
@WAPGuy Если вы собираетесь сказать что-то подобное, вы должны просветить всех нас, почему вы так думаете. - person Simon Halsey; 13.01.2012
comment
@WAP Guy Это изменение не имеет смысла - почему бы и нет? Исходный подход не имеет особого смысла, но совет по удалению объектов IDisposable разумен. - person Joe; 13.01.2012