Тайм-аут операции веб-ответа Asp.net Crawler - PullRequest
1 голос
/ 18 мая 2010

Привет! Я создал простой веб-сканер на основе пула потоков в своем веб-приложении. Его задача состоит в том, чтобы сканировать собственное пространство приложения и создавать индекс Lucene для каждой действующей веб-страницы и их мета-содержимого. Здесь проблема. Когда я запускаю искатель из экземпляра сервера отладки Visual Studio Express и предоставляю начальный экземпляр в качестве URL-адреса IIS, он работает нормально. Однако, когда я не предоставляю экземпляр IIS и для запуска процесса сканирования требуется собственный URL (т. Е. Выполняется обход собственного пространства домена), я получаю исключение по истечении времени ожидания операции в операторе Webresponse. Может кто-нибудь подсказать мне, что я должен или не должен делать здесь? Вот мой код для загрузки страницы. Выполнено в многопоточной среде.

private static string GetWebText(string url)
    {
        string htmlText = "";        

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.UserAgent = "My Crawler";

        using (WebResponse response = request.GetResponse())
        {
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    htmlText = reader.ReadToEnd();
                }
            }
        }
        return htmlText;
    }

И вот моя трассировка стека:

at System.Net.HttpWebRequest.GetResponse()
   at CSharpCrawler.Crawler.GetWebText(String url) in c:\myAppDev\myApp\site\App_Code\CrawlerLibs\Crawler.cs:line 366
   at CSharpCrawler.Crawler.CrawlPage(String url, List`1 threadCityList) in c:\myAppDev\myApp\site\App_Code\CrawlerLibs\Crawler.cs:line 105
   at CSharpCrawler.Crawler.CrawlSiteBuildIndex(String hostUrl, String urlToBeginSearchFrom, List`1 threadCityList) in c:\myAppDev\myApp\site\App_Code\CrawlerLibs\Crawler.cs:line 89
   at crawler_Default.threadedCrawlSiteBuildIndex(Object threadedCrawlerObj) in c:\myAppDev\myApp\site\crawler\Default.aspx.cs:line 108
   at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Спасибо и ура, Leon.

1 Ответ

0 голосов
/ 19 мая 2010

Сколько параллельных запросов делает ваш сканер? Вы могли бы просто голодать пул потоков - особенно, если сканер работает в коде веб-сайта.

Каждый запрос о том, что ваш вызов будет таким, будет использовать 2 потока из пула - один для обработки запроса, а другой для ожидания ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...