Bonjour, J'ai créé un moteur de balayage Web basé sur un pool de threads simple dans mon application Web. Son travail consiste à explorer son propre espace d'application et à créer un index Lucene de chaque page Web valide et de leur contenu méta. Voici le problème. Lorsque j'exécute le moteur de balayage à partir d'une instance de serveur de débogage de Visual Studio Express et fournissez l'instance de démarrage en tant qu'URL IIS, cela fonctionne correctement. Toutefois, lorsque je ne fournis pas l'instance IIS et qu'il utilise son propre URL pour démarrer le processus d'analyse (c.-à-d. L'exploration de son propre espace de domaine), l'exception d'expiration de l'opération est détectée par l'instruction Webresponse. Quelqu'un pourrait-il me guider dans ce que je devrais ou ne devrais pas faire ici? Voici mon code pour aller chercher la page. Il est exécuté dans l'environnement multithread.Asp.net Crawler Webresponse Opération expirée
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;
}
Et voici mon stacktrace:
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()
Merci et acclamations, Leon.
Peut-être ne trouvez-vous pas l'adresse Web que vous transmettez? Avez-vous vérifié? Si vous passez une adresse qui ne peut pas localiser, alors attendez la connexion pour obtenir le délai. – Aristos
Bonjour Aristos, oui j'ai confirmé que la page que je passe est "navigable". Cependant, comme je l'ai dit, lorsque le robot tourne sur son propre espace serveur, je ne peux pas accéder aux sites sur le serveur. Obtenez un message de 403 trop d'utilisateurs. Mais cela étant dit, ce problème ne se reproduit pas lorsque j'essaie d'exécuter le robot d'exploration pour une autre instance de serveur que la sienne. – Leon