系统环境:
Windows + .Net Framework 4.0
 
问题描述:
C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的;异常报错的信息:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy
 
分析过程:
在网上搜索到的解决方案,基本都是将代理置为null:request.Proxy = null; 并没有解释其原因。
 
调试发现,如果不去主动设置Proxy,创建request对象后(request = (FtpWebRequest)WebRequest.Create(uri)),其默认的Proxy就是null,不解。。。
 
如下是查找相关资料,得到的解释:

.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 类会尝试按如下方式找到代理配置脚本:

  1. WinINet InternetQueryOption 函数用于查找 Internet Explorer 最近检测到的代理配置脚本。

  2. 如果找不到该脚本,WebProxy 类将使用动态主机配置协议 (DHCP) 查找该脚本。 DHCP 服务器可以采用脚本的位置(主机名)或脚本的完整 URL 进行响应。

  3. 如果 DHCP 未标识 WPAD 主机,则查询 DNS 以找到 WPAD 作为其名称或别名的主机。

  4. 如果未标识该主机,并且代理配置脚本的位置由 Internet Explorer LAN 设置或配置文件指定,则使用此位置。

默认情况下,Internet Explorer 代理设置用于检测此代理。 如果应用程序基于非交互式帐户运行(没有用于配置 IE 代理设置的简便方法),或要使用不同于 IE 设置的代理设置,则可以通过创建定义了 <defaultProxy> 元素(网络设置)和 <proxy> 元素(网络设置)元素的配置文件,对代理进行配置。

对于所创建的请求,可通过将空 Proxy 用于该请求,禁用请求级别的自动代理检测,如下面的代码示例所示。

public static void DisableForMyRequest (Uri resource)
{
WebRequest request = WebRequest.Create (resource);
request.Proxy = null;
WebResponse response = request.GetResponse ();
}

结合上述解释,在问题电脑上,将自动检测代理关闭后,测试正常。

 
 

.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy的更多相关文章

  1. .NET下载文件报错System.UnauthorizedAccessException的解决方法

    假设VS代码对应路径为E:\Projects\Web1,在VS用“发布Web”的方式发布后的路径为E:\Site\Web1.在IIS新建2个站点,站点A指向E:\Projects\Web1,站点B指向 ...

  2. 上传文件报错System.Net.ProtocolViolationException: 必须先将 ContentLength 字节写入请求流,然后再调用 [Begin]GetResponse。

    在上传文件的时候报错. 错误: System.Net.ProtocolViolationException: 必须先将 ContentLength 字节写入请求流,然后再调用 [Begin]GetRe ...

  3. ASP.NET MVC页面报错System.InvalidOperationException The view found at '~/Views/Home/Index.cshtml' was not created.

    Application Exception System.InvalidOperationException The view found at '~/Views/Home/Index.cshtml' ...

  4. ABP 报错 System.InvalidOperationException: 实例失败。

    错误:System.InvalidOperationException: 实例失败. 解决:数据库链接写错了,斜杠的问题 core:两根斜杠 .net framework:一根斜杠 core的写法: ...

  5. 用icas下载文件报错

    前段时间服务器升级,过程中测试到报表下载,报表下载要用到icas,用的是sdts-client.jar,但是此jar包有两种连接模式,分别为: public static final SdtsConn ...

  6. IIS 下载文件 报错“401 - 未授权: 由于凭据无效,访问被拒绝。”

    点开身份验证 改为启用就OK了 重启一下IIS. 如果你上在办法没有解决可参考 1.打开“IIS信息服务管理器”——>选择你发布的网站——>选择功能视图中的“身份验证”——>右键匿名 ...

  7. c#.net从ftp下载文件到本地

    c#.net从ftp下载文件到本地      /*首先从配置文件读取ftp的登录信息*/  ;                     ;                     , buffer_c ...

  8. c#重命名文件,报错“System.NotSupportedException”类型的未经处理的异常在 mscorlib.dll 中发生”

    修改远程服务器的文件名,报错“System.NotSupportedException”类型的未经处理的异常在 mscorlib.dll 中发生”,“System.NotSupportedExcept ...

  9. java ftp下载文件

    1.使用官方正规的jar commons-net-1.4.1.jar jakarta-oro-2.0.8.jar 注意:使用ftp从windows服务器下载文件和从linux服务器下载文件不一样 2. ...

随机推荐

  1. 程序员到sql笔记

    1最近准备面试,总结一下之前学过到东西.

  2. .netcore微服务-Mycat

      1.前言 1.1  分布式数据库 随着IT行业的迅猛发展,行业应用系统的数据规模呈现爆炸式增长,对数据库的数据处理能力要求越来越高,分布式数据库正是因此应运而生. 分布式数据库特点包括: 透明性: ...

  3. Ubuntu 下载 Eclipse + tomcat 配置

    tomcat下载 去网站下载core中的 tar.gz的文件 下载之后依然转移到/opt文件夹然后进行解压 sudo cp apache-tomcat- /opt sudo tar -zxvf apa ...

  4. vue使用问题总结(长期更新)

    循环中绑定标签的属性 <div class="imgdiv" v-for="template of templateArr"> <img :s ...

  5. java和golang通过protobuf协议相互通信

    目录 整体结构说明 protobuf2文件 golang客户端 目录结构 生成pb.go文件 main.go util.go java服务端 目录结构 pom.xml application.yml ...

  6. 【MySQL】(六)锁

    开发多用户.数据库驱动的应用时,最大的一个难点是:一方面要最大程度地利用数据库的并发访问,另一方面还要确保每个用户能以一致的方式读取和修改数据.为此就有了锁(locking)的机制,同时这也是数据库系 ...

  7. File文件类

    目录 File文件类 File类的构造方法 File类的创建功能 File类的重命名 File类的删除功能 File类的判断功能 File类的获取功能 文件名称过滤器 File文件类 File:文件和 ...

  8. php--学习封装类 (一)(操作mysql数据库的数据访问)

    <?php class DBDA //定义一个类 { //定义成员变量,不能直接定义,前面要加上public或者是private public $host = "localhost&q ...

  9. 02-Kubenetes资源

    目录 Kubenetes资源 常用资源对象 标签labels 创建资源的方式 Pod pods.spec.containers 必须 nodeSelector <map [string]stri ...

  10. 又一个轮子--QMapper

    1 前言 我喜欢造轮子,一是造的时候就是深刻学习的时候,二是造着造着,说不定某天比世面上的其它轮子都要好呢.比如造过Networksocket,也造过WebApiClient,现在我也要造一个Mapp ...