2010-05-21 4 views
2

WebClient를 사용하여 (다운로드 데이터 등) http 웹 서비스와 연결하는 앱 (.NET 2.0)을 만들고 있습니다. 프록시 정보를 저장하거나 기본값을 사용하도록 설정할 수 있도록 양식을 추가하고 있습니다. 나는 약간의 것들에 대해 약간 혼란 스럽다.WebClient와 관련된 WebProxy와 IWebProxy의 관계는 무엇입니까?

먼저 WebProxy 또는 IWebProxy에서 사용할 수있는 일부 메서드 & 속성이 둘 다에 없습니다. WebClient를 호출 할 때 WebClient의 기능을 설정하는 것과 관련된 차이점은 무엇입니까?

두 번째로 WebProxy 또는 IWebProxy 클래스를 다른 곳에서 사용하면 프록시 정보를 사용하도록 WebClient에 지시해야합니까? 아니면 자동으로 상속됩니까?

세 번째로, 사용자가 기본 프록시 (IE에 설정된 모든 것)를 사용하고 기본 자격 증명 (IE에 설정된 모든 것으로 가정 함)을 사용할 때이 두 가지가 상호 배타적입니까? 또는 기본 프록시도 사용했을 때만 기본 자격 증명을 사용합니까?

이렇게하면 WebProxy와 IWebProxy의 모든 차이를 느낄 수 있습니다. WebRequest.DefaultProxy는 IWebPRoxy 클래스입니다. 그러나 UseDefaultCredentials는 IWebProxy 클래스의 메서드가 아니라 WebProxy에만 있고 차례로 두 개의 다른 클래스 인 경우 WebRequest.DefautlProxy로 프록시를 설정하는 방법입니까? 여기

는 사용자가 저장된 형태로 설정을 읽어 내 현재의 방법입니다 -하지만이 충분하지, 올바른 과잉, 또는 때문에 WebProxy가와 IWebProxy의 혼합 단지 잘못되면 나는 확실하지 않다 :

private WebProxy _proxyInfo = new WebProxy(); 
    private WebProxy SetProxyInfo() 
    { 
     if (UseProxy) 
     { 
      if (UseIEProxy) 
      { 
       // is doing this enough to set this as default for WebClient? 
       IWebProxy iProxy = WebRequest.DefaultWebProxy; 
       if (UseIEProxyCredentials) 
       { 
        _proxyInfo.UseDefaultCredentials = true; 
       } 
       else 
       { 
        // is doing this enough to set this as default credentials for WebClient? 
        WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ProxyUsername, ProxyPassword); 
       } 
      } 
      else 
      { 
       // is doing this enough to set this as default for WebClient? 
       WebRequest.DefaultWebProxy = new WebProxy(ProxyAddress, ParseLib.StringToInt(ProxyPort)); 
       if (UseIEProxyCredentials) 
       { 
        _proxyInfo.UseDefaultCredentials = true; 
       } 
       else 
       { 
        WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ProxyUsername, ProxyPassword); 
       } 
      } 
     } 
     // Do I need to WebClient to absorb this returned proxy info if I didn't set or use defaults? 
     return _proxyInfo; 
    } 

앱 특정 프록시 정보를 저장하지 않고 앱에 로그인 한 사용자의 기본 프록시 정보 & 자격증 명만 사용할 수있는 이유가 있습니까? HTTP를 사용한다면 이것이 충분하지 않을까요?

2 부 질문 :
WebClient 인스턴스가 프록시 정보를 사용하고 있는지 테스트 할 수 있습니까?

답변

1

IWebProxy는 인터페이스이며 WebProxy는 해당 인터페이스를 구현합니다. 따라서 WebProxy는 IWebProxy에없는 더 많은 메서드/속성을 가질 수 있습니다. WebClient page on MSDN 따르면

...

설명

프록시 속성이 웹 클라이언트 개체를 대신하여 원격 서버와 를 연통 IWebProxy 인스턴스를 식별한다. 프록시는 구성 파일 및 Internet Explorer 로컬 영역 네트워크 설정을 사용하는 시스템에서 설정됩니다. 프록시를 사용하지 않도록 지정하려면 프록시 속성을 GetEmptyWebProxy 메서드에서 반환 한 프록시 인스턴스 으로 설정합니다.

자동 프록시 감지에 대한 자세한 내용은 자동 프록시 검색을 참조하십시오.

따라서 웹 프록시를 명시 적으로 지정하지 않으면 괜찮습니다. IE가 사용하고있는 것을 사용해야합니다 (있는 경우).