2017-09-18 8 views
1

Je dois établir une longue connexion d'interrogation entre mon application et le serveur. J'utilise la classe HttpWebRequest et il fonctionne:HttpWebRequest & longue interrogation: comment savoir si une connexion longue interrogation a été établie?

for (; ;) 
    { 
     System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); 

     request.Timeout = 100000; 
     request.Method = "GET"; 
     request.KeepAlive = true; 
     request.Credentials = System.Net.CredentialCache.DefaultCredentials; 

     var response = request.GetResponse(); 
     : 
     : (wait for response...) 
    } 

Je dois savoir si le serveur est en ligne ou non. Si elle est hors ligne, l'application doit immédiatement informer l'utilisateur. Toutefois, si le serveur est hors connexion, GetResponse() ne renvoie aucune erreur tant qu'il n'a pas atteint le délai d'attente.

Je ne peux pas réduire le délai d'attente pour dire 0.1s non plus parce que l'application est supposée s'asseoir et attendre la réponse du serveur.

Ma question est de savoir si je peux dire immédiatement quand une connexion avec le serveur a été établie avec succès (sans se déconnecter du serveur bien sûr)?

Aidez-nous s'il vous plaît. Je vous remercie.

Répondre

0

J'ai finalement utilisé WebSocket au lieu de Polling Long, en utilisant WebSocket4Net, et il fonctionne:

WebSocket websocket = new WebSocket(url); 

websocket.Opened += (sender, e) => 
{ 
    // successfully connected, do sth (this is what i need) 
}; 

websocket.Error += (sender, e) => 
{ 
    Console.WriteLine(e.Exception.Message); 
}; 

websocket.MessageReceived += (sender, e) => 
{ 
    string msg = e.Message; 
}; 

websocket.Open(); 

Merci.