2011-01-27 3 views
0

나는 asp.net 2.0에서 fusemail을 통합하려고하고있다. API 페이지를 요청하기 위해 HttpWebRequest를 사용하고 있습니다. 최근에 HttpWebRequest가 처음 실패한 다음 계속되고 후속 요청이 성공했다는 사실을 알게되었습니다.HttpWebRequest가 처음 실패하고 작동하지 않는 이유는 무엇입니까?

내가 한번 실패한 후 작동이 코드

retry: 
     try 
     { 
      Uri uri = new Uri("http://www.fusemail.com/api/request.html"); 
      if (uri.Scheme == Uri.UriSchemeHttp) 
      { 

       HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
       request.PreAuthenticate = true; 
       request.Method = 
       WebRequestMethods.Http.Post; 

       //request.ReadWriteTimeout = System.Threading.Timeout.Infinite; 
       //request.Timeout = System.Threading.Timeout.Infinite; 
       request.ContentLength = data.Length; 
       request.ContentType = 
       "application/x-www-form-urlencoded"; 
       //request.UserAgent = Request.UserAgent; 
       request.UserAgent = "Mozilla/4.0"; 
       request.KeepAlive = false; 

       request.ServicePoint.Expect100Continue = true; 
       //request.Accept = "Accept: text/html,application/xhtml+xml,application/xml"; 


       StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
       writer.Write(data); 
       writer.Close(); 

       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

       StreamReader reader = new StreamReader(response.GetResponseStream()); 
       string tmp = reader.ReadToEnd(); 
       response.Close(); 
       //Response.Write(tmp); 

       if (!String.IsNullOrEmpty(tmp)) 
       { 
        return tmp; 
       } 
      } 
      return String.Empty; 
     } 
     catch (WebException ex) 
     { 

      goto retry; 
     } 

를 사용하는 경우 (내가 그것을 나쁜 프로그래밍 접근 방식 고토를 사용하는 경우 내가 아는) 말한다. 오류가 발생했을 때 텍스트 파일에 쓰고 있는데 요청이 실패하면 두 번째로 작동합니다. ASP.Net 2.0을 사용하고 있으며 웹 사이트는 Windows Server 2008 Standard가 설치된 IIS 7에서 호스팅됩니다. 또한 API 주소를 핑이 처음 실패 후

C:\>ping 67.207.202.118 

Pinging 67.207.202.118 with 32 bytes of data: 
Reply from 192.168.0.253: **Destination host unreachable**. 
Reply from 67.207.202.118: bytes=32 time=218ms TTL=49 
Reply from 67.207.202.118: bytes=32 time=218ms TTL=49 
Reply from 67.207.202.118: bytes=32 time=217ms TTL=49 

Ping statistics for 67.207.202.118: 
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 217ms, Maximum = 218ms, Average = 217ms 

는이 오류와 함께

System.Net.WebException 실패는 HttpWebRequest를 실패 처음 응답 : 원격 서버에 연결할 수 없습니다를 - -> System.Net.Sockets.SocketException : 연결된 당사자가 일정 시간 후 제대로 응답하지 않았거나 연결 호스트가 응답하지 않아 연결이 실패하여 연결 시도가 실패했습니다. 67.207.202.118:80

Is 첫 번째로 인증 문제가 있습니까? 나는 몇몇 포럼에서 먼저 Unauthorized (401 Unauthorized)를 전송 한 다음 연결할 수 있습니다. Fiddler를 사용하여이를 확인할 수 없습니다.

IIS 구성에 문제가 있습니까?

+1

아니 생각. 핑이 실패하면, 사용자 환경의 네트워크 문제점을 지적합니다. system.net 추적 로그를 생성하고 (http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html 참조) 로그 파일을보고 네트워크 계층에서 HWR이 무엇을 보는지 확인할 수 있습니다. – feroze

+0

명령 줄에서 telnet 67.207.202.118 80을 시도하여 포트 80에서 시스템에 소켓을 열 수 있는지 확인하십시오. 또한 붙여 넣은 ping 추적에서 처음으로 다른 ip - 192.168.0.253을 시도 했습니까? –

답변

1

이것은 프로그래밍 문제가 아니며 나중에 비슷한 문제가 발생했으며 ISA 서버/방화벽 설정으로 인해 네트워크 구성 문제가 발생했습니다. 이 문제를 확인하려면 네트워크 관리자에게 문의해야합니다.

도움이 되었기를 바랍니다.

너의 것,

모하메드 카말 Elbeah

수석 닷넷 개발자

+0

방화벽에서 변경 한 설정은 무엇입니까? –

관련 문제