none
비표준 URL(DDNS등)에서 WebResponse Class 오동작 문제 RRS feed

  • 질문

  • 안녕하세요, Visual Basic 2010 Professional 사용자입니다.

    윈도우 7 환경에서 개발중인 프로그램에 WebResponse Class를 사용하는 루틴이 있습니다.

    사용자가 입력한 URL주소의 무결성을 검사하는 루틴입니다.

    www로 시작하는 url이나 mail.aol.com등은 정상적으로 확인이 되지만 DDNS 주소 (예를 들어,

    test.iptime.org등) 은 확인이 되지 않고 WebException 또는 HttpWebException 이벤트가

    발생합니다. 코드는 다음과 같습니다.

            CheckURL = False
    
            HostAddress = "http://" & HostAddress
            Dim webResponse As Net.HttpWebResponse = Nothing
            Try
                Dim webRequest As Net.HttpWebRequest = Net.HttpWebRequest.Create(HostAddress)
                webResponse = DirectCast(webRequest.GetResponse(), Net.HttpWebResponse)
    
                CheckURL = True
                Lbl.Text = "DDNS 주소가 정상으로 확인되었습니다."
                Lbl.Refresh()
                ChkWin.Refresh()
                System.Threading.Thread.Sleep(2000)
            Catch
                CheckURL = False
            Finally
                If webResponse IsNot Nothing Then webResponse.Close()
            End Try

    처음에 글을 올렸을 때는 이 문제가 윈도우 버전의 호환성 문제인 줄 알았습니다만,

    확인해 보니 마찬가지입니다.

    윈도 7에서 문제가 없이 DDNS url검색이 가능했던 이유는 아마도 해당 PC가 해당 DDNS의

    망에 직접 로컬로 연결되어 있어 문제 없이 검색된 듯 합니다. 다른 곳의 DDNS주소는 Response를

    받지 못하더군요. 표준 url 뿐만 아니라 다른 주소도 확인가능한 작업을 할 수 있는 대체적인

    Method가 혹시 있다면 알려주시면 감사하겠습니다.


    2013년 4월 7일 일요일 오후 4:12

답변

  • 다른 방법으로 해결이 되었습니다.

    My.Computer.Network.Ping("IP or Hos Address") 로 해결이 되는군요.

    Ping Response 가 있으면 Tru, 없으면 False 값이 돌아옵니다.

    If Not My.Computer.Network.Ping("test.iptime.org") then

       MsgBox ("유효하지 않은 주소입니다.", VbExclamation + VbOkOnly, "주소 오류")

    End if

    이렇게 해결하였습니다.

    • 답변으로 표시됨 Stephen W. Park 2013년 4월 12일 금요일 오전 12:01
    2013년 4월 12일 금요일 오전 12:01

모든 응답

  • 좀더 확실한 원인을 확인하기 위해서  WebException 클래스을 사용해서 WebExceptionStatus.ProtocolError을 이용해 보시기 바랍니다.

    [참고자료]

    WebException 클래스

    WebExceptionStatus.ProtocolError

    제시해 드린 답변이 도움이 되었기를 바랍니다.
     
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

    2013년 4월 9일 화요일 오후 3:18
    중재자
  • 말씀해 주신 대로 WebException 클래스에서 에러내용을 확인해 보았습니다.

    >? webexcp.tostring()
    "System.Net.WebException: 원격 서버에 연결할 수 없습니다. ---> System.Net.Sockets.SocketException: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다 121.142.230.17:80     위치: System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)     위치: System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)     --- 내부 예외 스택 추적의 끝 ---     위치: System.Net.HttpWebRequest.GetResponse()     위치: WindowsApplication1.Module1.CheckURL(String HostAddress) 파일 C:\Users\User\Documents\Visual Studio 2010\Projects\RemoteManager\RemoteManager\Module1.vb:줄 56"
    >? status
    ConnectFailure {2}

    이런 오류라고 나옵니다.

    1. 정상적인 URL 즉 www로 시작하거나 mail 등으로 시작하는 url은 오류가 발생하지 않습니다.

    2. 회사의 라우터에 DDNS가 설정되어 있고 이 라우터에 개발 PC가 연결되어 있는 상태에서 해당 DDNS를 테스트해 보면 에러가 나지 않습니다.

    3. 회사 외부에 설치된, 완전히 다른 네트워크에 인터넷으로 연결된 곳의 DDNS를 테스트하면 반드시 이 오류가 발생합니다. 그런데, 정상적인 ping으로 이 DDNS 주소를 테스트하면 Response가 돌아옵니다.

    원인이 무엇인지, 해결방법은 없는건지 알고 싶군요. 이 문제 때문에 진도를 나가지 못하고 있습니다.

    2013년 4월 11일 목요일 오후 12:19
  • 다른 방법으로 해결이 되었습니다.

    My.Computer.Network.Ping("IP or Hos Address") 로 해결이 되는군요.

    Ping Response 가 있으면 Tru, 없으면 False 값이 돌아옵니다.

    If Not My.Computer.Network.Ping("test.iptime.org") then

       MsgBox ("유효하지 않은 주소입니다.", VbExclamation + VbOkOnly, "주소 오류")

    End if

    이렇게 해결하였습니다.

    • 답변으로 표시됨 Stephen W. Park 2013년 4월 12일 금요일 오전 12:01
    2013년 4월 12일 금요일 오전 12:01
  • 해결방법 공유해주셔서 감사드립니다.

    공유해주신 답변은 다른 분들에게 좋은 정보가 되어집니다.

    감사합니다.

    2013년 4월 12일 금요일 오전 2:49
    중재자