我需要在C#中创建一个简单的http客户端,它必须是异步的,并且必须支持持久连接到服务器。所以我想使用WebClient类,但我有一些问题,我的代码是这样的:C#异步持久性WebClient示例
void sendMessage()
{
ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(bypassAllCertificateStuff);
string loginRequest = @"{'IDENTIFIER':'patient1','PASSWORD':'asdasd','DEVICE_ID':'knt-01'}";
client = new WebClient();
// add event handlers for completed and progress changed
client.UploadProgressChanged += new UploadProgressChangedEventHandler(client_UploadProgressChanged);
client.UploadStringCompleted += new UploadStringCompletedEventHandler(client_UploadStringCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
// carry out the operation as normal
client.UploadStringAsync(new Uri("Https://192.168.1.100/PaLogin"), "POST", loginRequest);
}
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Console.WriteLine("downloadProgressChanged");
}
void client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
// Console.WriteLine(e.ProgressPercentage);
if (e.ProgressPercentage != 50)
{
Console.WriteLine("uploadProgressChanged");
}
}
void client_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
if (e.Result != null)
{
Console.WriteLine("Done");
}
}
的问题是,我应该接收来自服务器的响应,但无论是client_UploadStringCompleted也不client_DownloadProgressChanged回调被称为。 我在控制台上看到的唯一的事情就是:client_DownloadProgressChanged
所以基本上我想要做的是:
1 - 我发送一些数据到服务器,而无需关闭 2 - 我收到的连接服务器响应,但是当我收到它时,连接仍然必须打开。
我错过了什么?
谢谢。 :-)
要在此展开,'连接:保持Alive'会导致TCP连接在HTTP事务完成后保持打开状态,客户端可以使用此现有连接发送另一个HTTP请求,而不是建立新的连接。 – Polynomial
确实如此。然而,我看到很多情况下,客户端或服务器决定不尊重它并关闭连接。 – Aliostad
'连接:Keep-Alive'旨在**请求**保持活着。你不能依靠支持。如果服务器不支持它,或者不想提供它,它将简单地关闭连接。如果客户稍后决定它不需要连接,它将关闭它。这同样适用于服务器端。 – Polynomial