C# 中WinForm 應用程式實現遠程檔案管理(上傳、下載)的種種問題
WinForm可以通過C#語言提供的WebClient類的UploadFile和DownLoadFile函數實現檔案的上傳和下載功能,但是這也讓我嘗試到了使用這個函數時的辛酸,搞了整整一天才成功。而且在使用的環境是win7 + iis7.0,iis7.0和iis6.0相比在,在配置操作上有很大的區別。
1 檔案下載,檔案下載功能很easy,一個函數,也沒有出現任何問題,估計最大的問題就是伺服器檔案路徑找不到,產生的404錯誤,未找到。
WebClient myClient = new WebClient();
String localfilePath = dialog1.FileName;
myClient. DownloadFile (“http://localhost:2368/upload/fileName”, localfilePath);
2 檔案上傳功能:
這個功能整整的折磨了我一天,知道晚上9點中才基本搞定。也把種種問題遇到了。
WebClient client = new WebClient ();
// Add a user agent header in case the requested URI contains a query.
client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
client.UploadFile(localfile,”PUT”,ServerPath);
2.1 遠程伺服器返回錯誤: (401) 添加身分識別驗證:
需要在網站開啟身分識別驗證的許可權(允許匿名訪問,windows 身分識別驗證),在iis7.0內容視圖上雙擊身分識別驗證、開啟匿名驗證和windows身分識別驗證。
2.2 遠程伺服器返回錯誤 (403) 已禁止
解決方案:iis虛擬目錄的寫入許可權和uploadfile檔案夾給iis_user使用者開寫入許可權。
進入網站的虛擬路徑目錄,虛擬目錄屬性給寫入許可權;
2.3 遠程伺服器返回錯誤: (404) 未找到
分析與解決方案:一般是由於UploadFile()函數中中“PUT”、“POST”關鍵字,要選擇使用“PUT”關鍵字。同時要添加iis的處理常式映射。
WebClient myClient = new WebClient();
myClient.UploadFile(Serverurl,"PUT",localfilePath);
//UploadFile函數中如果關鍵字POST,必須改用PUT。同時要配置IIS的功能視圖中的處理常式映射,配置過程如下:開始-運行—inetmgr命令,開啟ii7,左側選擇虛擬目錄,右側選擇功能視圖—處理常式映射-雙擊進入,選擇ExtensionlessUrlHandler-Integrated-4.0雙擊後,點擊要求節流-謂詞面板-,下列謂詞之一:GET,HEAD,POST,DEBUG,PUT,DELETE。預設沒有PUT,DELETE,添加上。
2.4“遠程伺服器返回錯誤: (405) 不允許的方法
解決方案:把網站發布到iis上,設定iis的寫入許可權和上傳檔案夾的寫入許可權。不知道為什麼在本地調試都是報這種錯誤,把網站發布到iis上,再通過iis訪問就可以通過了,邪乎~。
2.5“遠程伺服器返回錯誤: (500) 內部伺服器錯誤
分析與解決方案:可能是client資訊頭需要設定,
WebClient client = new WebClient ();
// Add a user agent header in case the requested URI contains a query.
client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
2.6遠程伺服器返回錯誤: (501) 未實現
webdav沒有啟動,ii6中webdav作為iis的輔助服務,預設不開啟,可以自己開啟。
或win7中WebClient服務沒有開啟(我的電腦-管理-服務中開啟此服務),同時在iis7.0 中配置webdav服務,添加授權規則:allow access to ( all content); Allow access to this content to (All users) ;permission (Read, Source,Write)
遇到的問題基本就這些,具體為什麼會出現這種錯誤,再次不介紹,可以去網上搜搜。