.Net 連接FTP下載文件報錯:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

来源:https://www.cnblogs.com/Juning/archive/2019/08/22/11392683.html
-Advertisement-
Play Games

系統環境: Windows + .Net Framework 4.0 問題描述: C#連接FTP下載文件時,在部分電腦上有異常報錯,在一部分電腦上是正常的;異常報錯的信息:System.InvalidOperationException: The requested FTP command is n ...


系統環境: 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 ();  
}  

結合上述解釋,在問題電腦上,將自動檢測代理關閉後,測試正常。

 

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 導出至Excel是非常常見,我們可以用很多類庫,例如Aspose、NOPI、Interop,在這裡我們使用微軟自家的工具。我的WPF綁定的ObservableCollection<T>集合。 該方法還不止這麼多,還涉及到了1-27 = A-Z 的適配,如以下方法。 最後我們獲取數據給方法,下麵是設計 ...
  • 本文主要參照https://www.bilibili.com/video/av42364337/?p=4 英文幫助文檔:https://identityserver4.readthedocs.io/en/latest/ 中文幫助文檔:http://www.identityserver.com.cn ...
  • 一、Swagger是什麼 Swagger 是一款RESTFUL介面的、基於YAML、JSON語言的文檔線上自動生成、代碼自動生成的工具。 二、如何在項目中加入Swagger Swagger安裝引用 右鍵Web項目依賴項>管理NuGet程式包>在搜索框輸入"Swashbuckle.AspNetCore ...
  • 本次應用DevExpress和C#語言製作了一個批量添加水印的程式,看界面效果圖: 界面中既可以進行文字水印添加,也可以圖片水印添加,同時還可以對水印的位置進行設置,比較實用! 文字水印的具體添加情況,看圖: 還可以文字的預覽: 整個文字水印的預覽: 同時圖片的水印預覽: 最後顯示下圖片的水印效果: ...
  • 摘要 本文將介紹如何通過VS2019創建Xamarin.Forms應用程式,以及如何進行調試。 前言 本文介紹Xamarin.Froms應用程式的創建和調試。 開發環境 1.Visual Studio 2019 2.Xamarin.Forms 3.6.0.344457 創建 1.打開VS2019,選 ...
  • 初學者經常碰到的,即獲取HTML元素集合,迴圈給元素添加事件。在事件響應函數中(event handler)獲取對應的索引。但每次獲取的都是最後一次迴圈的索引。原因是初學者並未理解JavaScript的閉包特性。 1. <!DOCTYPE HTML> 2. <html> 3. <head> 4. < ...
  • 前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制項,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr ...
  • 話不多說,上圖: 整體項目結構如圖所示,我的設計初衷是基於.netCore + DI + Vue 打造一個適合初學者的簡捷開發框架。 架構模型採用基於RESTful API風格的前後臺分離框架,總體分為五層:表示層(前端UI)、交互層、業務層、數據訪問層、數據存儲層。 項目中用到的技術如下圖所示: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...