2 Stimmen

Welche Beziehung besteht zwischen WebProxy und IWebProxy in Bezug auf den WebClient?

Ich erstelle eine App (.NET 2.0), die WebClient verwendet, um eine Verbindung (downloaddata, etc.) zu/von einem http-Webdienst. Ich füge jetzt ein Formular hinzu, um die Proxy-Informationen entweder zu speichern oder die Standardeinstellungen zu verwenden. Ich bin ein wenig verwirrt über einige Dinge.

Erstens sind einige der Methoden und Eigenschaften, die entweder in WebProxy oder IWebProxy verfügbar sind, nicht in beiden enthalten. Worin besteht hier der Unterschied in Bezug auf die Einstellung, wie der WebClient bei seinem Aufruf zu behandeln ist?

Zweitens, muss ich WebClient sagen, die Proxy-Informationen zu verwenden, wenn ich es mit entweder WebProxy oder IWebProxy Klasse anderswo festgelegt? Oder wird sie automatisch vererbt?

Drittens, wenn Sie dem Benutzer die Möglichkeit geben, den Standard-Proxy (was auch immer im IE eingestellt ist) und die Standard-Anmeldeinformationen (ich nehme an, auch was auch immer im IE eingestellt ist) zu verwenden, schließen sich diese beiden gegenseitig aus? Oder verwenden Sie die Standard-Anmeldeinformationen nur, wenn Sie auch den Standard-Proxy verwendet haben?

Das bringt mich zu dem ganzen Unterschied zwischen WebProxy und IWebProxy. WebRequest.DefaultProxy ist eine IWebPRoxy-Klasse aber UseDefaultCredentials ist keine Methode in der IWebProxy-Klasse, sondern nur in der WebProxy-Klasse. Wie kann ich den Proxy auf den WebRequest.DefautlProxy setzen, wenn es sich um zwei verschiedene Klassen handelt?

Hier ist meine aktuelle Methode, um die gespeicherten Formulareinstellungen durch den Benutzer zu lesen - aber ich bin nicht sicher, ob dies richtig ist, nicht genug, Overkill, oder einfach falsch wegen der Mischung aus WebProxy und 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;
    }

Gibt es einen Grund, die Speicherung app-spezifischer Proxy-Informationen nicht einfach abzuschaffen und der App nur die Möglichkeit zu geben, die Standard-Proxy-Informationen und -Anmeldeinformationen für den angemeldeten Benutzer zu verwenden? Wird dies jemals nicht ausreichen, wenn HTTP verwendet wird?

Teil 2 Frage:
Wie kann ich testen, ob die WebClient-Instanz die Proxy-Informationen verwendet oder nicht?

1voto

feroze Punkte 7008

IWebProxy ist eine Schnittstelle, und WebProxy implementiert diese Schnittstelle. WebProxy kann also mehr Methoden/Eigenschaften haben, die bei IWebProxy nicht vorhanden sind.

Selon le WebClient-Seite auf MSDN ...

Bemerkungen

Die Eigenschaft Proxy identifiziert die IWebProxy-Instanz, die mit mit entfernten Servern im Namen dieser WebClient-Objekts kommuniziert. Der Proxy wird vom das System mit Hilfe von Konfigurationsdateien und die Einstellungen des Internet Explorers für das lokale Netzwerkeinstellungen. Um festzulegen, dass kein Proxy verwendet werden soll, setzen Sie die Eigenschaft Proxy Eigenschaft auf die Proxy-Instanz die von der Methode GetEmptyWebProxy Methode zurückgegeben wird.

Für Informationen über automatische Proxys Erkennung, siehe Automatische Proxy Erkennung.

Daher sollte es in Ordnung sein, wenn Sie nicht ausdrücklich einen Webproxy angeben. Es sollte derjenige verwendet werden, den der IE verwendet (falls vorhanden).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X