我正在创建一个应用程序(.NET 2.0),该应用程序使用WebClient连接(下载数据等)到http Web服务/从http Web服务连接。
我现在要添加一个表单来处理允许存储或设置为使用默认值的代理信息。我对某些事情有些困惑。
首先,WebProxy或IWebProxy中可用的某些方法和属性都不在两者中。在设置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实例是否正在使用代理信息?
最佳答案
IWebProxy是一个接口,而WebProxy实现该接口。因此,WebProxy可以具有IWebProxy上不存在的更多方法/属性。
根据WebClient page on MSDN ...
备注
Proxy属性标识
IWebProxy实例进行通信
与远程服务器代表
WebClient对象。代理设置
使用配置文件的系统
和Internet Explorer本地
网络设置。要指定否
应该使用代理,设置代理
代理实例的属性
由GetEmptyWebProxy返回
方法。
有关自动代理的信息
检测,请参阅自动代理
检测。
因此,如果没有显式指定webproxy,就可以。它应该使用IE正在使用的那个(如果有)。
关于c# - WebProxy和IWebProxy之间相对于WebClient有什么关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2886274/