當前位置:
首頁 > 知識 > C中調用HttpWebRequest類中Get/Post請求無故失效的詭異問題

C中調用HttpWebRequest類中Get/Post請求無故失效的詭異問題

先附代碼

/// <summary>
/// 客戶端Http(GET)
/// </summary>
/// <param name="strUrl">請求路徑</param>
/// <returns>response字元串</returns>
public string HttpGet(string strUrl)
{

// string strEncodeUrl = HttpUtility.UrlEncode(strUrl, Encoding.UTF8);
string content = string.Empty;
try
{
HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create(strUrl);
wReq.Method = "GET";
// Get the response instance.
System.Net.WebResponse wResp = wReq.GetResponse;
System.IO.Stream respStream = wResp.GetResponseStream;

using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, UTF8Encoding.UTF8))
{
content = reader.ReadToEnd;
}
respStream.Close;
wResp.Close;
wReq.Abort;
}
catch (Exception ex)
{
LogHelper.Instance.Error("HttpGet請求出錯:" + ex.ToString);
throw;
}
return content;
}

在當前項目開發中遇到了一個問題,在調用GetResponse方法時,wReq會掛掉,而且無法命中斷點。

然後經過了大量努力和查閱資料仍沒有解決。/(ㄒoㄒ)/~~

之前Get請求超時是因為被多線程情況下連接數限制了

改成這樣就行了System.Net.ServicePointManager.DefaultConnectionLimit = 512;

然而這對於現在這個問題沒有任何幫助,在執行到System.Net.WebResponse wResp = wReq.GetResponse;時代碼直接會掛掉,無法獲取異常,也就無法分析是什麼問題導致的。

然後嘗試了大量的方法解決,換成Post請求一樣失效;對HttpWebRequest 進行了大量設置,一樣不管用;並且介面是正確的,在瀏覽器中響應時間很快。

然而。。。。峰迴路轉,在機緣巧合下我試了一下另起一個線程執行這個Get請求,竟然正常了!現在就要反過來推理是怎麼回事了。

研究後發現這個Get請求是在windows消息線程中進行的,(public const int WM_COPYDATA = 0x004A; //當一個應用程序傳遞數據給另一個應用程序時發送此消息)

分析HttpWebRequest類:

HttpWebRequest請求是非同步回調方式的,從BeginGetResponse開始,並通過AsyncCallback指定回調方法;WebClient方式使用基於事件的非同步編程模型,在HTTP響應返回時引發的WebClient回調是在UI線程中調用的,因此可用於更新UI元素的性。HttpWebRequest是基於後台進程運行的,回調不是UI線程,所以不能直接對UI進行操作,通常使用Dispatcher.BeginInvoke跟界面進行通訊。

感覺失敗可能是跟其GetResponse內部實現相關。

希望大家引以為戒吧。。。然後給大家遇到相同問題時如何思考提供一點淺顯的幫助

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

如何恢復未釋放租約的HDFS文件
Windows10系統PHP開發環境配置
從 Vue 1.x 遷移—Vue.js
初識 tk.mybatis.mapper 通用mapper

TAG:科技優家 |

您可能感興趣

Apple ID無故被鎖:iPhone用戶尷尬了
電腦無故重啟 微軟更新Windows禁用英特爾Spectre v2補丁
蘋果:iPhone 8及iPhone X已硬體升級 不會無故關機
無故自燃?!Ducati Panigale V4 全球首台"報廢事故" 官方回應迅速
iPhone X繼iPhone 7無故無網路之後又爆出新問題!
iPhone X更新iOS 12.1後無故爆炸自焚?!Apple將如何解決?
CL 無故躺槍?BlackPink金智妮 INS 曬照引熱議
蘋果:iPhone8及iPX已硬體升級 不會無故關機
剛買三周的iPhoneXS Max無故自燃 蘋果稱或只是巧合
蘋果:iPhone 8/X 已硬體升級,不會無故關機
iPhone7無故重啟,元兇是一個爛硬碟
iPhone XR 爆質量問題?無故「轉菊花」,無限重啟!
急!iTunes被無故扣款了,怎麼辦?
Secret宋智恩無故退團,公司欲走法律程序
Apple ID無故被鎖:迷茫尷尬,心情很複雜……
Mate20X被笑解析度差 XR卻無故躺槍!
蔡徐坤平白無故又被黑?看清這次內容,ikun怒了:nmsl
「流氓鑒定器」?Vivo NEX攝像頭無故彈出有蹊蹺
Cindy教口語,「無緣無故」英語怎麼說?
iPhone X無故發熱 更換主板後又建議全面維修