2010-05-21 11 views
2

Je crée une application (.NET 2.0) qui utilise WebClient pour se connecter (downloaddata, etc) vers/depuis un service web http. J'ajoute maintenant un formulaire permettant de gérer l'enregistrement des informations de proxy ou d'utiliser les valeurs par défaut. Je suis un peu confus à propos de certaines choses.Quelle est la relation entre WebProxy et IWebProxy par rapport à WebClient?

D'abord, certaines des méthodes & propriétés disponibles dans WebProxy ou IWebProxy ne sont pas dans les deux. Quelle est la différence ici en ce qui concerne la configuration de WebClient lors de son appel?

Deuxièmement, dois-je dire à WebClient d'utiliser les informations de proxy si je l'ai défini en utilisant une classe WebProxy ou IWebProxy ailleurs? Ou est-il automatiquement hérité? Troisièmement, en donnant à l'utilisateur la possibilité d'utiliser le proxy par défaut (tout ce qui est défini dans IE) et en utilisant les informations d'identification par défaut (je suppose aussi tout ce qui est défini dans IE) sont-elles mutuellement exclusives? Ou vous utilisez uniquement les informations d'identification par défaut lorsque vous avez également utilisé le proxy par défaut?

Cela me fait toute la différence entre WebProxy et IWebProxy. WebRequest.DefaultProxy est une classe IWebPRoxy mais UseDefaultCredentials n'est pas une méthode sur la classe IWebProxy, mais uniquement sur WebProxy et, à son tour, Comment définir le proxy sur WebRequest.DefautlProxy s'il s'agit de deux classes différentes?

Voici ma méthode actuelle de lire les paramètres de formulaire stockés par l'utilisateur - mais je ne sais pas si cela est vrai, ne suffit pas, surpuissant, ou tout simplement mal à cause du mélange de WebProxy et 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; 
    } 

Existe-t-il une raison pour non seulement scrapper stocker des informations de proxy spécifiques à l'application et autoriser uniquement l'application à utiliser les informations d'identification par défaut & les informations d'identification de l'utilisateur connecté? Est-ce que cela ne suffira jamais si vous utilisez HTTP?

Partie 2 Question:
Comment puis-je tester si l'instance WebClient utilise ou non les informations de proxy?

Répondre

1

IWebProxy est une interface et WebProxy implémente cette interface. Ainsi, WebProxy peut avoir plus de méthodes/propriétés qui ne sont pas présentes sur IWebProxy.

Selon le WebClient page on MSDN ...

Remarques

La propriété Proxy identifie la instance IWebProxy qui communique avec les serveurs distants au nom de cet objet WebClient. Le proxy est défini par le système en utilisant les fichiers de configuration et la zone locale Internet Explorer Paramètres réseau. Pour spécifier qu'aucun proxy ne doit être utilisé, définissez la propriété Proxy sur l'instance de proxy renvoyée par la méthode GetEmptyWebProxy .

Pour plus d'informations sur la détection automatique du proxy , voir Proxy automatique Détection.

Par conséquent, cela devrait être correct si vous ne spécifiez pas explicitement une webproxy. Il devrait utiliser celui que IE utilise (le cas échéant).