情況說明:
有如下代碼(在下面貼出),我本機VS除錯及IIS架設測驗均可以接收到資料(本機IIS7.5),但發送到服務端進行POST請求就是死活接收不到資料,服務端iis6.0,用WebClient服務端與本機測驗均可接收到資料
控制臺主要代碼:
private static async Task<string> SendRequestEx(string url, int eventIndex, string carNum, long sn, int recordType, string doorNum,
int inOrOut, int valid, string eventDate, string des, string photoName, string Token)
{
//HttpClient client = new HttpClient {BaseAddress = new Uri(url)};
using (HttpClient client = new HttpClient())
{
//HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = 256000;
client.DefaultRequestHeaders.Add("user-agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36");
using (MultipartFormDataContent content = new MultipartFormDataContent(DateTime.Now.Ticks.ToString("X")))
{
content.Add(new StringContent(Convert.ToString(eventIndex)), "event_index");
content.Add(new StringContent(carNum), "card_num");
content.Add(new StringContent(Convert.ToString(sn)), "machine_sn");
content.Add(new StringContent(Convert.ToString(recordType)), "record_type");
content.Add(new StringContent(doorNum), "door_num");
content.Add(new StringContent(Convert.ToString(inOrOut)), "in_or_out");
content.Add(new StringContent(Convert.ToString(valid)), "is_valid");
content.Add(new StringContent(Convert.ToString(eventDate)), "event_date");
content.Add(new StringContent(Convert.ToString(des)), "event_des");
content.Add(new StringContent(Convert.ToString(photoName)), "photo");
content.Add(new StringContent(Convert.ToString(Token)), "token");
var response = await client.PostAsync(url, content);
return response.Content.ReadAsStringAsync().Result;
}
}
}
服務端接收代碼如下:
string eventIndex = context.Request["event_index"];
string cardNum = context.Request["card_num"];
string machineSn = context.Request["machine_sn"];
string recordType = context.Request["record_type"];
string doorNum = context.Request["door_num"];
string inOrOut = context.Request["in_or_out"];
string isValid = context.Request["is_valid"];
string eventDate = context.Request["event_date"];
string eventDes = context.Request["event_des"];
string token = context.Request["token"];
string photo = null;
Javis.WriteLog("Form-Data:[event_index]:" + eventIndex + ";" +
"[card_num]:" + cardNum + ";" +
"[machine_sn]:" + machineSn + ";" +
"[record_type]:" + recordType + ";" +
"[door_num]:" + doorNum + ";" +
"[in_or_out]:" + inOrOut + ";" +
"[is_valid]:" + isValid + ";" +
"[event_date]:" + eventDate + ";" +
"[event_des]:" + eventDes + ";" +
"[token]:" + token + ";");
if (string.IsNullOrEmpty(eventIndex) ||
string.IsNullOrEmpty(cardNum) ||
string.IsNullOrEmpty(machineSn) ||
string.IsNullOrEmpty(recordType) ||
string.IsNullOrEmpty(doorNum) ||
string.IsNullOrEmpty(inOrOut) ||
string.IsNullOrEmpty(isValid) ||
string.IsNullOrEmpty(eventDate) ||
string.IsNullOrEmpty(eventDes) ||
string.IsNullOrEmpty(token))
{
context.Response.Write("資料不合法");
return;
}
//這里進行資料庫插入操作
列印日志的時候一直為空,我不知道是因為什么原因,麻煩各位大佬幫我看一下
uj5u.com熱心網友回復:
換種方式試試~uj5u.com熱心網友回復:
其他方式都可以,因為這種代碼風格比較簡潔,還有我就是想知道原因在哪里,不然下次碰到還得寫比較冗長的代碼,我想更精進一步,麻煩幫幫忙
uj5u.com熱心網友回復:
你外部是async,內部是.Result,你這樣肯定會死鎖好不……然后HttpClient不要隨便釋放,正常應該static化,頻繁創建會導致埠耗盡的,當然static也會有dns決議之類不更新的問題
uj5u.com熱心網友回復:
謝謝大佬指教,但我的這個接收不到資料的問題是什么問題呢?
uj5u.com熱心網友回復:
不是接不到資料,是最后的Result導致程式死鎖了你將response.Content.ReadAsStringAsync().Result改成 await response.Content.ReadAsStringAsync()看看
uj5u.com熱心網友回復:
還是一樣的結果,我剛試了,因為我以前用fiddler抓包是能發出去的POST請求,服務器也能收到,只是沒有資料,我不知道為什么
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/124825.html
標籤:C#
下一篇:VS2015社區版安裝失敗的原因?提示:However,not all features installed correctly.
