.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy
.net framework 上
proxy属性标识iwebproxy与 ftp 服务器进行通信的实例。 代理的设置是由系统使用的配置文件和 internet explorer 本地网络设置。 若要指定应使用任何代理,请设置proxy返回的代理实例到globalproxyselection.getemptywebproxy方法。
必须设置proxy之前将数据写入到请求的流或获取响应。 更改proxy后调用getrequeststream, begingetrequeststream, getresponse,或begingetresponse方法使invalidoperationexception异常。
ftpwebrequest类支持 http 和 isa 防火墙客户端代理。
如果指定的代理是 http 代理,则仅downloadfile, listdirectory,和listdirectorydetails支持命令。
上述说明,基本已经解释了异常的原因。但是既然代码中并未指定代理,但是实际缺使用了http代理,结合有的电脑没问题有的电脑有问题现象,猜测应该是电脑设置或网络设置问题。如下是“自动检测代理”的说明,基本可以解释:
自动代理检测是一个进程,系统使用该进程来标识 web 代理服务器,并用于代表客户端发送请求。 此功能也称为 web 代理自动发现 (wpad)。 启用自动代理检测后,系统会尝试查找代理配置脚本,该脚本负责返回一组可用于请求的代理。 如果找到了代理配置脚本,则会在针对使用 webproxy 实例的请求获取代理信息、请求流或响应时,在本地计算机上下载、编译并运行该脚本。
自动代理检测由 webproxy 类执行,且可采用请求级设置、配置文件中的设置和通过 internet explorer“局域网(lan)”对话框指定的设置。
启用自动代理检测后,webproxy 类会尝试按如下方式找到代理配置脚本:
-
wininet
internetqueryoption
函数用于查找 internet explorer 最近检测到的代理配置脚本。 -
如果找不到该脚本,webproxy 类将使用动态主机配置协议 (dhcp) 查找该脚本。 dhcp 服务器可以采用脚本的位置(主机名)或脚本的完整 url 进行响应。
-
如果 dhcp 未标识 wpad 主机,则查询 dns 以找到 wpad 作为其名称或别名的主机。
-
如果未标识该主机,并且代理配置脚本的位置由 internet explorer lan 设置或配置文件指定,则使用此位置。
默认情况下,internet explorer 代理设置用于检测此代理。 如果应用程序基于非交互式帐户运行(没有用于配置 ie 代理设置的简便方法),或要使用不同于 ie 设置的代理设置,则可以通过创建定义了 <defaultproxy> 元素(网络设置)和 元素的配置文件,对代理进行配置。
对于所创建的请求,可通过将空 proxy 用于该请求,禁用请求级别的自动代理检测,如下面的代码示例所示。
public static void disableformyrequest (uri resource)
{
webrequest request = webrequest.create (resource);
request.proxy = null;
webresponse response = request.getresponse ();
}
结合上述解释,在问题电脑上,将自动检测代理关闭后,测试正常。