Асинхронные запросы из ASP.NET
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Асинхронные запросы из ASP.NET Expand / Collapse
Автор
Сообщение
31.08.2006 11:06
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421, Visits: 49 251
кто-нибудь работал с оным? открываю в цикле запросы с неким таймаутом. цикл длинный, но похоже все заканчивается по истечение таймаута у первого запроса. если кто сталкивался с реальным использованием пришлю пример с проблемой
Сообщ. #903653
31.08.2006 11:20
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Я с асинхроннымми страницами дело имел, а они предполагают использование асинхронных запросов. Выложи код, может смогу чем-то помочь.
Сообщ. #903655
31.08.2006 11:39
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421, Visits: 49 251
в цикле чтение ссылок u из БД
{
 WebRequest request = HttpWebRequest.Create(u); // u = "http://....
 request.Method = "GET";
 
 RequestState state = new RequestState(request, data, u);
 IAsyncResult result = request.BeginGetResponse(
 new AsyncCallback(UpdateDescription), state);
 
 ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
     new WaitOrTimerCallback(ScanTimeoutCallback), state, (5 * 60 * 1000), true); // 5 min timeout
}
   
// UpdateDescription это процедура обработки полученного ответа
private void UpdateDescription(IAsyncResult result)
{
    RequestState state = (RequestState)result.AsyncState;
    WebRequest request = (WebRequest)state.Request;
    HttpWebResponse r = (HttpWebResponse)request.EndGetResponse(result);
    Stream s = (Stream)r.GetResponseStream();
    StreamReader readStream = new StreamReader(s);
    string dataString = readStream.ReadToEnd(); // полученный ответ сервера
    r.Close();
    s.Close();
    readStream.Close();
}

private void ScanTimeoutCallback(object state, bool timedOut)
{
    if (timedOut)
    {
        RequestState reqState = (RequestState)state;
        if (reqState != null)
            reqState.Request.Abort();
    }
}
// RequestState это класс для формирования запроса
public class RequestState
{
    public WebRequest Request; // holds the request
    public object Data; // store any data in this
    public string SiteUrl; // holds the UrlString to match up results (Database lookup, etc).
    public RequestState(WebRequest request, object data, string siteUrl)
    {
        this.Request = request;
        this.Data = data;
        this.SiteUrl = siteUrl;
    }
}

вот и теперь проблема в следующем - цикл длинный, но после его начала происходит примерно 5 минут и запросы перестают выполняться (я это вижу по результатам работы), т.е. как я понимаю таймаут один на всех? мне надо чтобы таймаут был в 5 минут для каждого запроса.

Сообщ. #903657
02.09.2006 15:39
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Извини, что долго не отвечал. Пытался лучше понять задачу и как ее решить.

К сожалению в итоге так и не смог точно понять почему так происхожит :(. Таймаут в 5 минут точно индивидуальный, а не обший. Попробуй код внутри цикла вынести в отдельную функцию и сделай ее вызов с помощью ThreadPool.QueueUserWorkItem. Возможно, если запрос к сайтам будет начинаться из разных потоков, то проблема исчезнет.

Сообщ. #903775
05.09.2006 17:25
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421, Visits: 49 251
м.б. — надо пробовать

кстати, насчет последнего параметра ThreadPool.RegisterWaitForSingleObject знаешь что? м.б. в нем еще проблема

Сообщ. #903879
05.09.2006 17:28
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
RegisterWaitForSingleObject я вообще не пользовался никогда.
Сообщ. #903881
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 2:50