標籤:winform style http 檔案 資料 類
由於項目需要,最近研究了下WebClient的資料轉送。關於WebClient介紹網上有很多詳細介紹,大概就是利用WebClient可以實現對Internet資源的訪問。無外乎用戶端發送請求,服務端處理請求、回應請求。所以,我下面就簡單描述下學習過程中遇到的一些問題:
1.關於Winform用戶端請求
WebClient wc = new WebClient();//初始化webclientstring path = "http://192.168.1.115:8089/Handler1.ashx";Uri uri = new Uri(path + "?RequestType=uploaddata");string str="Requestdata";wc.UploadStringAsync(uri, str);
關於此處的UploadStringAsync方法,WebClient下有多個方法,UploadStringAsync是非同步呼叫,伺服器響應後會有一個回呼函數,可以在回呼函數裡查看服務端返回來的資訊。如下
void client_UploadStringCompleted(object o, UploadStringCompletedEventArgs e) { if (e.Error == null) { if (e.Result == "ok") this.DialogResult = DialogResult.OK; else MessageBox.Show("相應處理", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
但是client_UploadStringCompleted事件提前註冊。
2.關於Web服務端處理請求
用戶端發出了請求,如果請求的Url沒有問題的話,服務端就會收到請求,這裡注意到,之前請求的Url中有一個Handler1.ashx(一般處理常式),用來處理用戶端發出的請求。這樣Web服務端就可以直接在事件處理檔案中處理請求資訊,不需有前台頁面。
public void ProcessRequest(HttpContext context) { if (context.Request["RequestType"] == "uploaddata") { context.Response.ContentType = "text/plain"; context.Response.Write("ok"); } }
在if中可以對請求進行處理,然後向用戶端發出響應的回應。
3.關於報錯之“遠程伺服器返回錯誤(500):內部伺服器錯誤”
之前在做簡易用戶端與服務端互動string類型的資料時並沒有遇到這個問題,但是後來研究伺服器如何向用戶端返回datatable或者dataset資料時(一般在程式中都是要用到,程式基本不可能只有string資料互動),發現總是報這個錯,查了一上午的資料,也沒有解決自己的問題,網上的解決辦法有很多種,例如:遠程伺服器是否更改了檔案,遠程伺服器沒有許可權諸如此類,總之是服務端的問題,但是服務端的什麼問題,由於沒有辦法測試服務端(因為Web服務端發布了的,這樣winform端才能訪問),所以一直不知道怎麼解決。下午上班時,突然想到是不是自己的代碼有問題。就在另一個程式上測試了自己的代碼,發現文法上沒問題,但是邏輯上有問題。這才終於解決了困擾自己的問題。之後再遇到這樣的問題,首先就會去想是否代碼問題,若不是,再翻閱相關資料進行查詢。
以上均為自己的拙見,若有不對,敬請批評指正。歡迎交流。(後期應該會繼續更新)