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?