2012-04-12 2 views
1

응용 프로그램에서 나는 현재 많은 데이터를 캐싱하는 백엔드 Java 응용 프로그램이 있습니다. asp.net 부분은 사용자가 데이터베이스 테이블을 업데이트 할 수있게합니다. DB가 업데이트 될 때마다 Java 응용 프로그램의 캐시를 지워야합니다. 따라서 기본적으로 캐시를 지우려면 각각 4 개의 URL 목록이 필요합니다. 내 기본 솔루션은 각 URL을 통해 루프 및 HttpWebRequest 만들고 응답을 얻는 것입니다. 그래서 기본적으로 각 요청에 대해 이것을 가지고 있습니다.HttpWebRequest Hanging

var request = (HttpWebRequest)WebRequest.Create(url); 
       request.Method = "POST"; 
       request.ContentLength = 0; 

       using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
       { 
        Stream receiveStream = response.GetResponseStream(); 
        StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
        string responseString = readStream.ReadToEnd(); 

        returnList.Add(string.Format("Refresh response from {0}.<br />{1}", url, responseString)); 

        readStream.Close(); 
        receiveStream.Close(); 
       } 

내 로컬 컴퓨터에서 모든 것이 잘 작동합니다. 하지만 개발 서버에 배포하면 아무 것도하지 않습니다. request.ContentLength = 0;을 제거하면 원격 서버는 411 : Length expected error를 발생시킵니다.

나는 정말로 여기에서 붙어있어서 어떤 도움이라도 대단히 감사하겠습니다.

HttpWebRequest 문제에 대한 해결책이나 각 URL을 호출하는 다른 해결책이 효과가 있을지 모르지만 나는 까다 롭지 않습니다.

미리 감사드립니다.

답변

0

확실히 네트워크 문제였습니다. 로드 밸런서와 다른 URL을 치려고 시도했는데 아무런 문제가 없으므로로드 밸런서에 도달 할 수있는 모든 서버와 모든 서버 캐시가 지워지는지 확인합니다.

코드 작동하는지 :

var request = (HttpWebRequest)WebRequest.Create(url); 

      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       Stream receiveStream = response.GetResponseStream(); 
       StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
       string responseString = readStream.ReadToEnd(); 

       returnString = string.Format(@"Refresh response from<br />{0}{1}", url, responseString); 

       readStream.Close(); 
       receiveStream.Close(); 
      } 
0

request.method를 "POST"로 사용하는 이유는 무엇입니까? 콘텐츠 길이와 요청 방법을 모두 제거하지 않으려는 경우 데이터를 게시하고 있습니까?