Fond
Je construis une application C# à distance pour me connecter via un serveur php. Il vérifie si le programme client est reconnu par le serveur puis boucle pour envoyer des journaux tels que l'heure en ligne et vérifie les commandes. J'ai vaguement commenté certaines parties que vous ne pouvez pas comprendre pourquoi je les ai faites.WebClient est bloqué?
namespace Revamped_SERVER
{
class Program
{
static readonly String BASEURL = "http://mysite.com/index.php?";
static String OLD_ID = default(String);
static String CURRENT_ID = default(String);
static string GET(string PHP,Boolean IS_COMMAND)
{
using (WebClient CLIENT = new WebClient())
{
string RAW = CLIENT.DownloadString(BASEURL + PHP);
if (IS_COMMAND)
{
//this is a command, I remove the unique command ID so that previous commands and new ones aren't repeated if they have been submited more than once
CURRENT_ID = RAW.Remove(5, RAW.Length - 5);
return RAW.Remove(RAW.Length - 154, 154).Replace(CURRENT_ID, "");
}
else { return RAW.Remove(RAW.Length - 154, 154); } //this part removes extra string from server analytics a pain in the ***.
}
}
static string TIMESTAMP()
{
return DateTime.Now.ToString("M/d/yyy") + " - " + DateTime.Now.ToString("HH:mm:ss tt"); //Time to send to server
}
static void Main(string[] args)
{
using (WebClient CLIENT = new WebClient())
{
Boolean CONNECTED = false;
String Username = Environment.UserName;
while (true)
{
while (CONNECTED == false)
{
if (GET("REQUEST=ONLINE",false) == "TRUE")
{
CONNECTED = true;
}
}
if (CONNECTED)
{
if (GET("REQUEST=CHECK",false) == "FALSE")
{
CLIENT.OpenRead(BASEURL + "REQUEST=ADD");
}
CLIENT.OpenRead(BASEURL + "DATA=" + Username + "\r\nLast online at " + TIMESTAMP());
try
{
//this is where it gets stuck
String COMMAND = GET("REQUEST=COMMAND",true);
if (CURRENT_ID != OLD_ID)
{
OLD_ID = CURRENT_ID; //Set new ID
MessageBox.Show(COMMAND); //Show what Commands was sent by server
}
}
catch
{
CONNECTED = false;
}
}
}
}
}
}
}
Problème
Sur la première boucle, il fonctionne parfaitement bien: Connects, vérifie s'il est reconnu par le serveur et vérifie ensuite les commandes. Cependant, comme il boucle à nouveau, il envoie les journaux, mais reste bloqué à:
String COMMAND = GET("REQUEST=COMMAND",true);
Il me donne pas d'erreur, mais quand je passe la souris ma souris du client web, il me donne ceci:
J'ai regardé ces articles mais cela ne m'explique pas comment je peux éviter cela dans mon cas.
http://blogs.msdn.com/b/jmstall/archive/2005/11/15/funceval-rules.aspx
Quel est le problème avec ce WebClient étant bloqué sur sa deuxième boucle?
Détails
- J'utilise .NET 4.5
- Windows 7 64 bits
- Visual Studios 2012
- Server est en ligne et fonctionne parfaitement
Il existe de nombreuses raisons pour lesquelles DownloadString peut prendre un certain temps. Vous pourriez être en mesure de voir de meilleures informations pendant le débogage si vous ne déployez pas de binaires de version. Remplacez temporairement les fichiers binaires par des fichiers binaires de débogage et réessayez. –