[英]c# httpclient post force single packet
使用Microsoft Message Analyzer,我可以看到使用HttpClient的發布數據正在兩個tcp數據包中發送。 一個用於標題,然后一個用於發布數據。 該數據可以很容易地放入一個數據包中,但是卻被分為兩個部分。 我已經明確啟用了nagling,並期望繼續使用ServicePointManager繼續執行100次,但這似乎無濟於事。
ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = true;
5023(.Net)顯示2個數據包發送到目標,8170(郵遞員)顯示1個數據包正在發送。 使用相同的有效載荷進行測試。
以下是一些用於在.net中生成請求的示例代碼
public void TestRequest()
{
var uri = new Uri("http://www.webscantest.com/");
ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = true;
var p = ServicePointManager.FindServicePoint(uri);
p.Expect100Continue = false;
p.UseNagleAlgorithm = true;
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Connection", "close");
var values = new Dictionary<string, string>
{
{ "thing1", "hello" },
{ "thing2", "world" }
};
var content = new FormUrlEncodedContent(values);
var response = client.PostAsync("http://www.webscantest.com/", content, CancellationToken.None).Result;
}
有沒有一種方法可以將有效載荷強制為單個數據包?
使用.Net Framework 4.7
因此,在查看了dotnet核心源代碼(在其他.net版本中只能假定相同)之后,我可以在WinHttpHandler中看到請求標頭和請求 正文在不同的位置發送。
請求標頭與Interop.WinHttp.WinHttpSendRequest一起發送。 然后根據WinHttp文檔,帶有Interop.WinHttp.WinHttpWriteData的請求主體將“等待,直到WinHttpSendRequest完成,然后調用此函數” 。
我認為,如果請求正文是通過WinHttpSendRequest發送的,則該問題可以解決,當前該正文設置為IntPtr.Zero 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.