2014-03-29 1 views
0

주어진 URL 목록에 도달해야하는 웹 크롤러를 작성하고 있습니다. 이제 웹 인터페이스를 만들어 크롤러 모듈을 시작하고 중지해야합니다.C# Asp.Net 다른 웹 요청에 의한 긴 웹 요청 취소

이제 웹 요청 (간단히 완료하는 데 시간이 오래 걸림)만으로 모듈을 호출 할 수 있습니다.

이제는 웹 요청을 중단하여 요청을 완료하지 못하게 할 수 있습니다. 두 번째 요청은 먼저 요청을 중지하라는 명령을 제공해야하지만 두 요청이 어떻게 통신 (데이터 공유) 할 수 있습니까?

메신저는 며칠 동안 인터넷에 매달려 있지만 주제에 대해서는 도움이되지 않았습니다 , 제발 포인터 또는 다른 대안을 제공 할 수 있습니다.

답변

1

당신은 웹 크롤러 (그대로 추한) 간단한 솔루션을 실행하는 단일 서버가 요청의 정적 수집을 유지할 가능성이있는 경우 : 당신이 할 때

// assume the Request class contains the information necessary to cancel the request 
// e. g. the cancellation token 
private static readonly ConcurrentDictionary<Guid, Request> Requests = new ConcurrentDictionary<Guid, Request>(); 

초기 요청은을 시작합니다 크롤러를 사용하면 요청에 대한 Guid 키를 생성하고 장기 실행 요청을 정적 사전에 저장할 수 있습니다. 그런 다음 해당 키를 전달하여 취소 요청을 할 수 있습니다. 또한 요청이 정상적으로 완료되면 사전 요청을 제거해야합니다 (별도의 정리 스레드 또는 요청 완료를 기다리는 작업 계속).

여러 서버가있는 경우에도이 방법을 사용할 수 있지만 어떤 서버가 어떤 요청을 실행했는지 확인하기위한 해결책이 필요합니다 (예 : 매핑을 저장할 데이터베이스 또는 모든 요청자에게 중단 요청을 전송하는 수단) 서버).

+0

몇 가지 샘플 코드를 제공해 주시겠습니까? 나는 다른 요청에 접근하는 것에 관해 모른다. 고려해 줘서 고마워. –

+0

멋진 answer.can 좀 더 정교한 또는 이것에 관한 연구에 대한 링크를 첨부 할 수 있습니까? – ManirajSS