2011-12-30 3 views
0

서버로 작동하는 다중 스레드 콘솔 응용 프로그램이 있습니다.다중 스레드 응용 프로그램에서 4th HttpWebRequest의 이상한 시간 초과

//code copied from http://www.switchonthecode.com/tutorials/csharp-tutorial-simple- threaded-tcp-server 
//blocks until a client has connected to the server 
TcpClient client = tcpListener.AcceptTcpClient(); 
//create a thread to handle communication with connected client 
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm)); 
       clientThread.Start(client); 

이 스레드는 다음 코드를 사용 HttpWebRequests의 숫자를 만드는 : 서버는 새 스레드에게 새로운 클라이언트가 TcpListener에 연결하는 모든 시간을 생성합니다

public static HttpWebResponse HttpGet(string pRequestURI, string pArgs) 
{ 
    string requestURI = string.Format("{0}?{1}", pRequestURI, pArgs); 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURI); 
    request.Method = "GET"; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    return response; 
} 

문제는, 내가 얻을 것입니다 FOURTH 요청시 제한 시간. 그것은 정말로 별났다. 그리고 나는 그것의 취급 법을 얻을 수 없다. 코드는 단일 스레드 응용 프로그램에있을 때 제대로 작동했습니다. 나는 또한 사용하여 응답 스트림을 닫습니다 확인하고 오전 :

response.Close(); 

requestURI이 올바른지, '나는 복사하여 브라우저에 붙여 시도 원인. 사실, 네 번째 요청이 무엇인지는 중요하지 않습니다. (나는 다른 시도를 시도했습니다.) 나는 항상 타임 아웃을합니다.

나는 thread-limits와 관련이 있을지 모르지만 실제로 어떻게 해결해야할지 모르겠다. 어떤 제안이라도 대단히 감사하겠습니다.

감사합니다.

+0

클라이언트가 하나뿐이므로 서버에서 네 번째 요청이 실패합니다. 아니면 문제가 둘 이상의 클라이언트에서만 나타 납니까? – arx

+0

@arx 지금은 단 하나의 클라이언트 인 ASP.NET 웹 응용 프로그램 만 있습니다. 결국 서버에는 더 많은 클라이언트가 있지만 지금은 하나만 가지고 있습니다. – Rachel

+0

스레딩 문제와 비슷하게 들리지 않습니다. 다른 연결을 기다리는 유휴 상태 인 주 스레드와 간섭 할 다른 스레드가없는 서비스 스레드 만 있습니다. 웹 요청을하는 사이에 무엇을하고 있습니까? 다음 요청을하기 전에 응답을 닫으시겠습니까? 아니면 모두 열어 두어 함께 처리 할 수 ​​있습니까? – arx

답변

3

많은 피와 땀과 눈물을 흘린 후에 그것을 해결했습니다.

정말 어리석은 실수 였는데, 요청을 닫지 않고 인이 한 곳이 나타났습니다.

일부 (알 수없는) 이유로 인해 웹 응용 프로그램에서 요청한 내용에 영향을 미치지 않지만 콘솔 응용 프로그램에서 요청을 실행할 때 시간 초과 문제가 발생합니다.

귀하의 도움에 감사드립니다.

+0

필자는 응답을 얻은 후에 모든 요청에 ​​대해'request.ServicePoint.CloseConnectionGroup (request.ConnectionGroupName); '을 사용하여 전체 연결 그룹을 닫아야했습니다. – SimpleVar

0

request.ServicePoint.CloseConnectionGroup (request.ConnectionGroupName); 이 코드 줄은 내 문제를 해결했습니다. 감사합니다.

관련 문제