今天收到測試提的一個BUG,經過調式發現,所寫的服務中因為要傳大量引數,造成字串超長,之前用的webclint執行Get方法請求伺服器,伺服器端資料就會不完整,所以就丟擲了異常。
首先想到的改進方法就是用POST請求伺服器,在MSDN上查詢了一些資料,寫個簡單的HttpWebRequest使用POST方法請求伺服器的方法。
public bool AddData(string authors,string title)
{
String url = ”http://localhost/Services/postdata.aspx”;
HttpWebRequest hwr = WebRequest.Create(url) as HttpWebRequest;
hwr.Method = “POST”;
hwr.ContentType = “application/x-www-form-urlencoded”;
string postdata = “title=” + title + “&authors=” + authors;byte[] data = Encoding.UTF8.GetBytes(postdata);
using (Stream stream = hwr.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var result = hwr.GetResponse() as HttpWebResponse;
log.Info(“處理結果:” + WebResponseGet(result));return true;
}
這樣就完成了一個簡單的POST請求,其中hwr.ContentType = “application/x-www-form-urlencoded”這句話很重要,如果不加的話,服務端將收不到客戶傳送的資料。另外,在輸出日誌 的時候用到的WebResponseGet(result)方法其實就是將stream輸出成文字的方法,因為在執行請求後伺服器返回的是一個檔案流,所 以結果需要將檔案流讀出來。
public string WebResponseGet(HttpWebResponse webResponse)
{
StreamReader responseReader = null;
string responseData = “”;
try
{
responseReader = new StreamReader(webResponse.GetResponseStream());
responseData = responseReader.ReadToEnd();
}
catch
{
throw;
}
finally
{
webResponse.GetResponseStream().Close();
responseReader.Close();
responseReader = null;
}
return responseData;
}