2012-05-17 4 views
1

위해 나는 지금 2 년 내 웹 기반 응용 프로그램에 사용했습니다 ASP.Net 클래스의 일부 코드가 있습니다. 커맨드 라인 도구에서 비슷한 비즈니스 기능을 수행하고자합니다. 두 응용 프로그램에서 동일한 코드를 사용하고 있지만 명령 줄 응용 프로그램은 코드의 아래 부분에있는 "GetRequestStream"호출에서 시간이 초과되었습니다.전화는 ASP.Net에서 작동하지만 콘솔 응용 프로그램

나는 내가 그들과 함께 끝났어요 때 나는 REQ와 req2을 닫으면 작업을 GetRequestStream에 대한 호출을 얻을 수있었습니다. 그러나 req3을 인증하려면 req와 req2가 열려 있어야합니다. 그래서 req2와 req2를 열어두면 GetRequestStream이 시간 초과됩니다. req 및 req2를 닫으면 GetRequestStream에 대한 호출이 작동하지만 req3이 인증에 실패합니다.

내가 언급 한 바와 같이

는 동일한 코드는 웹 기반, ASP.Net 응용 프로그램으로 잘 작동한다. 이 클래스를 콘솔 기반 애플리케이션으로 빌드 할 때만 이러한 문제가 발생합니다.

것은 나는이 연결 뭔가해야한다는 생각 해요,하지만 난 닷넷에서 명령 줄 응용 프로그램을 구축하는 비교적 새로운 해요.

도움을 주시면 감사하겠습니다.

  string uri = baseUri + "auth/authrequired"; 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
      req.Timeout = 1000000; 
      req.Proxy = null; 
      req.CookieContainer = cc; 
      var MyWebResponse = (WebResponse)req.GetResponse(); 

      uri = baseUri + "authenticated/identity"; 
      HttpWebRequest req2 = (HttpWebRequest)WebRequest.Create(uri); 
      req2.Timeout = 1000000; 
      req2.Proxy = null; 
      req2.CookieContainer = cc; 
      MyWebResponse = req2.GetResponse(); 

      uri = baseUri + "j_security_check"; 
      string reqParams = "j_username=" + "jmclaughlin" + "&j_password=" + "jmclaughlin"; 
      byte[] reqData = Encoding.UTF8.GetBytes(reqParams); 

      HttpWebRequest req3 = (HttpWebRequest)WebRequest.Create(uri); 
      req3.Timeout = 1000000; 
      req3.Proxy = null; 
      req3.CookieContainer = cc; 
      req3.Method = "POST"; 
      req3.ContentType = "application/x-www-form-urlencoded"; 
      req3.AllowAutoRedirect = true; 
      req3.ContentLength = reqData.Length; 
      using (var s = req3.GetRequestStream()) 
       s.Write(reqData, 0, reqData.Length); 
      MyWebResponse = req3.GetResponse(); 

답변

2

귀하는 GetResponse으로 전화를 걸었으나 폐기하지 마십시오. 응답이 완료 될 때까지 연결 상태가 유지됩니다. 기본적으로, 당신이 응답에 대한 using 문을 사용한다 : 어떤 하나의 호스트에 동시 연결 제한을 사용한 경우

using (var response = req.GetResponse()) 
{ 
    // Do whatever with the response 
} 

당신이 결코 연결을 해제하지 있기 때문에, 당신은 기본적으로 기다리고있어 이전 연결이 해제됩니다. 응답을 적절하게 처리하면 문제가되지 않습니다.

다른 작업 (그러므로 및 마무리) 가비지 컬렉션을 일으키는 원인이되기 때문에 그것은 아마 단지 ASP.NET에서 일하고있어 -하지만 여전히 적시에 응답 처분 더 잘 될 것이다.

+0

감사 존. 나는 그것이 가비지 수집이 나를 위해 처리하고있는 것이라고 생각했다. 그게 잘 됐어! –