2009-10-20 8 views
1

J'utilise VSTS 2008 + C# + .Net 3.5 pour développer une application console et j'envoie une requête à un autre serveur (IIS 7.0 sur Windows Server 2008). Je trouve quand le nombre de threads de demande est grand, le IIS 7.0 répondra avec l'erreur http 503. Des idées ce qui ne va pas et comment régler pour rendre IIS 7.0 servir plus de demandes?envoyer une erreur de requête HTTP (Http 503) en C#

Voici mon code,

class Program 
{ 
    private static int ClientCount = 100; 
    private static string TargetURL = "http://labtest/abc.wmv"; 
    private static int Timeout = 200; 

    static void PerformanceWorker() 
    { 
     Stream dataStream = null; 
     HttpWebRequest request = null; 
     HttpWebResponse response = null; 
     StreamReader reader = null; 
     try 
     { 
      request = (HttpWebRequest)WebRequest.Create(TargetURL); 
      request.Timeout = Timeout * 1000; 
      request.Proxy = null; 
      response = (HttpWebResponse)request.GetResponse(); 
      dataStream = response.GetResponseStream(); 
      reader = new StreamReader(dataStream); 

      // 1 M at one time 
      char[] c = new char[1000 * 10]; 

      while (reader.Read(c, 0, c.Length) > 0) 
      { 
       Console.WriteLine(Thread.CurrentThread.ManagedThreadId); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message + "\n" + ex.StackTrace); 
     } 
     finally 
     { 
      if (null != reader) 
      { 
       reader.Close(); 
      } 
      if (null != dataStream) 
      { 
       dataStream.Close(); 
      } 
      if (null != response) 
      { 
       response.Close(); 
      } 
     } 
    } 

    static void Main(string[] args) 
    { 
     Thread[] workers = new Thread[ClientCount]; 
     for (int i = 0; i < ClientCount; i++) 
     { 
      workers[i] = new Thread((new ThreadStart(PerformanceWorker))); 
     } 

     for (int i = 0; i < ClientCount; i++) 
     { 
      workers[i].Start(); 
     } 

     for (int i = 0; i < ClientCount; i++) 
     { 
      workers[i].Join(); 
     }   

     return; 
    } 
} 
+1

Effectuez-vous réellement 100 demandes simultanées? – RobV

+0

Oui, bien sûr. Pourquoi avez-vous une telle suspicion? :-) – George2

Répondre

2

Le code d'état 503 signifie Service non disponible et peut être émis par les serveurs lorsqu'ils sont temporairement surchargés ou trop occupés. Comme le dit Bhushan, de nombreux facteurs peuvent affecter la capacité d'un serveur à répondre aux demandes.

Recherchez la configuration IIS sur MSDN ou essayez de poser votre question sur Server Fault (l'équivalent du serveur StackOverflow). Vous aurez probablement besoin d'augmenter la quantité de requêtes simultanées permises dans un fichier de configuration quelque part mais même si vous le faites, vous serez toujours limité par les capacités de votre serveur.

également jeter un oeil à ce post sur le forum MSDN sur l'augmentation des requêtes simultanées au maximum à un hôte qui HttpWebRequest peut faire: http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007/
Par défaut est limité à 2

Modifier

Essayez de regarder à http://www.server7.iis.net/ConfigReference/system.applicationHost/sites/site/siteDefaults/limits pour configurer la connexion au serveur et les limites de bande passante

+0

Ce que vous avez mentionné est la limitation du côté client (j'ai déjà fixé la connexion client max à 20 000) . Je pense que ce que je devrais configurer est la limitation côté serveur? – George2

+1

a ajouté un lien vers ce qui ressemble à la configuration IIS 7 que vous devrez ajuster à la réponse originale – RobV

+0

De ce document, le numéro de connexion simultané max par défaut est La valeur par défaut est 4294967295, semble assez grande et pas nécessaire mettre en place? – George2

1

Je ne sais pas beaucoup sur l'administration IIS mais la capacité d'un serveur Web dépend de divers facteurs de la puissance cpu, mémoire disponible, le traitement de la demande, le temps de traitement des , etc. Je ne sais pas si IIS a une configuration pour limiter le nombre de requêtes qu'il peut traiter à la fois. Peu importe ce qu'il y aura toujours une limite qu'un serveur peut gérer. Donc, en fonction des facteurs ci-dessus, vous devez fournir autant de capacité pour gérer la charge prévue.

+0

Merci! J'ai ouvert le gestionnaire de tâches et voir CPU/Mémoire/Réseau sont tous consommés une petite partie (moins de 50%). D'autres idées à régler? – George2

+0

Merci! J'ai une question similaire ici, appréciez si vous pouviez jeter un coup d'oeil. http://stackoverflow.com/questions/1598748/unable-to-connect-to-remote-server-fail-in-httpwebrequest – George2

Questions connexes