PRB: Chyba System.InvalidOperationException při použití HttpWebRequest a třídy HttpWebResponse v aplikaci s fondem podprocesů

Překlady článku Překlady článku
ID článku: 815637 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Pokud použijete v aplikaci, která používá fondu podprocesů System.Net.HttpWebRequest a System.Net.HttpWebResponse třídy, můžete obdržet následující chybovou zprávu:
System.InvalidOperationException: Obsahuje nebyly dostatek volné podprocesy ve fondu podprocesů objektu k dokončení operace

Příčina

System.Net.HttpWebRequest a System.Net.HttpWebResponse třídy vždy používat asynchronní metody k dokončení požadavku. Při asynchronní požadavku, technologie ASP.NET používá nový podproces fondu podprocesů objektu. Při ASP.NET nenalezne podproces, třídy System.Net.HttpWebRequest vrátí chybovou zprávu namísto fronty žádost.

Jak potíže obejít

Chcete-li tento problém vyřešit, použijte jednu z následujících metod:
  • Použití bloku try zachytávání v kódu výjimku zachytit a řešit vhodným způsobem.
  • Mechanismus řízení front zachovat výjimky z výskytu implementovat.
  • Používáte-li ASP.NET Internetová informační služba 5.0 nebo novější, překonfigurovat velikost fondu podprocesů v souboru Machine.config souboru. Chcete-li to provést, postupujte takto:
    1. Otevřete soubor Machine.config ve složce %Systemroot% \Microsoft.NET\Framework\ Version \Config.
    2. V části <processmodel>v souboru Machine.config nastavte na hodnotu zmaxWorkerThreads a maxIoThreads atributy maximálního počtu podprocesů procesu pro každý procesor. Například je-li tato hodnota 25 na serveru jednoprocesorové, technologie ASP.NET používá spustitelné aplikace programovací rozhraní (API) Chcete-li nastavit limit procesu na 25. Na dvou procesoru serveru je limit nastavena na 50.

      Poznámka: Sledování využití PROCESORU, když zvětšíte fondu podprocesů zachovat omezení.
    3. Uložit změny souboru Machine.config.

Prohlášení

Toto chování je záměrné.

Další informace

  1. Spuštění Aplikace Microsoft Visual Studio .NET.
  2. V nabídce soubor přejděte na příkaz Nový a potom klepněte na příkaz projekt.
  3. Projekty Visual Basic nebo Visual C# projekty v rámci Typy projektů, klepnutí na příkaz Aplikace konzoly v části šablony.
  4. Kód v okně kódu Class1 nahraďte následující kód v závislosti na typu projektu:

    Visual C# .NET kód
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Threading;
    using System.Net.Sockets;
    
    namespace threadTest
    {
      
    	class Class1
    	{
    		 public static void Main()
    		{			
    		// Set number of threads to be created for testing.
    			int testThreads = 55;
    			for(int i=0;i<testThreads;i++)
    			{
    				ThreadPool.QueueUserWorkItem(new WaitCallback(PoolFunc));
    			}
    			Console.ReadLine();
    		}
    
    		static void PoolFunc(object state)
    		{
    			int workerThreads,completionPortThreads;
    			ThreadPool.GetAvailableThreads(out workerThreads,
    				out completionPortThreads);
    			Console.WriteLine("WorkerThreads: {0}, CompletionPortThreads: {1}", 
    			workerThreads, completionPortThreads);
    			Thread.Sleep(10000);
    			
    			string url ="http://www.msn.com";         
    			
    			HttpWebRequest myHttpWebRequest ; 
    			HttpWebResponse myHttpWebResponse=null ;        
    			// Creates an HttpWebRequest for the specified URL.    
    			myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
    			// Sends the HttpWebRequest, and waits for a response.
    			myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();            
    			myHttpWebResponse.Close();
    		}
    	}
    }
    
    Kódu jazyka Visual Basic .NET
    Imports System.IO
    Imports System.Net
    Imports System.Text
    Imports System.Threading
    Imports System.Net.Sockets
    
    Module Module1
    
       Sub Main()
          'Set number of threads to be created for testing.
          Dim testThreads As Integer = 55
          Dim i As Integer
    
          For i = 0 To testThreads
             ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf PoolFunc))
          Next
          Console.ReadLine()
    
       End Sub
       Public Sub PoolFunc(ByVal state As Object)
    
          Dim workerThreads, completionPortThreads As Integer
    
          ThreadPool.GetAvailableThreads(workerThreads, completionPortThreads)
    
          Console.WriteLine("WorkerThreads: {0}, CompletionPortThreads: {1}", workerThreads, completionPortThreads)
          Thread.Sleep(10000)
          Dim url As String = "http://www.msn.com"
          Dim myHttpWebRequest As HttpWebRequest
          Dim myHttpWebResponse As HttpWebResponse = Nothing
          ' Creates an HttpWebRequest for the specified URL. 
          myHttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
          'Sends the HttpWebRequest, and waits for a response.
          myHttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse)
          myHttpWebResponse.Close()
       End Sub
    End Module
  5. V nabídce Debug klepněte na příkaz Start ke spuštění aplikace. Poté, co je k dispozici WorkerThreads dosáhne hodnoty 0, zobrazí se chybová zpráva, je uvedena v části "Příznaky".

Odkazy

Na Další informace naleznete následujících webech společnosti Microsoft:
Fond podprocesů v rozhraní .NET Framework programování
http://msdn2.microsoft.com/en-us/library/ms973903.aspx

<processmodel>Prvek
http://msdn2.microsoft.com/en-us/library/7w2sway1(vs.71).aspx

Vlastnosti

ID článku: 815637 - Poslední aktualizace: 28. února 2014 - Revize: 1.4
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
Klíčová slova: 
kbnosurvey kbarchive kbmt kbnamespace kbweb kbxml kbwnet kberrmsg kbconfig kbdev kbthread kbprb KB815637 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:815637

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com