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)
遇到的問題基本就這些,具體為什么會出現這種錯誤,再次不介紹,可以去網上搜搜。