C#で単純なhttpクライアントを作成する必要があります。非同期でなければならず、サーバーへの永続的な接続をサポートする必要があります。だから私はWebClientクラスを使用しようとしているが、私はいくつかの問題を抱えている、私のコードはこれです:C#async永続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-閉じずに、サーバーにいくつかのデータを送信しますサーバーの応答が表示されますが、接続がまだ開いている必要があります。
私には何が欠けていますか?
ありがとうございます。 :-)
: http://en.wikipedia.org/wiki/Comet_(programming))
C#クライアントをHTTPトランザクションが完了した後に接続が開いたままであり、クライアントは新しい接続を作成する代わりに、この既存の接続を使用して別のHTTP要求を送信する可能性があります。 – Polynomial
真。しかし、私は、クライアントまたはサーバーがそれを尊重しないことを決定し、接続を閉じた多くのケースを見てきました。 – Aliostad
'接続:キープアライブ'は**キープアライブを要求する**ように設計されています。サポートに頼ることはできません。サーバがそれをサポートしていない場合、またはサーバを提供したくない場合、単に接続を終了します。後でクライアントが接続を必要としないと判断した場合、クライアントは接続を終了します。同じことがサーバー側にも当てはまります。 – Polynomial