SORUN: İletisi uygulama iş parçacığı havuzu ile HttpWebRequest ve HttpWebResponse sınıflarını kullandığınızda hata

Makale çevirileri Makale çevirileri
Makale numarası: 815637 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Belirtiler

Bir iş parçacığı havuzu kullanan bir uygulama System.Net.HttpWebRequest ve System.Net.HttpWebResponse sınıflarını kullandığınızda, aşağıdaki hata iletisini alabilirsiniz:
Iletisi: Mevcut değildi yeterli boş iş parçacığı havuzu nesnesinde işlemi tamamlamak için

Neden

System.Net.HttpWebRequest ve System.Net.HttpWebResponse sınıfları, zaman uyumsuz yöntem isteği tamamlamak için her zaman kullanın. ASP.NET, zaman uyumsuz bir istek yapıldığında, yeni bir iş parçacığı havuzu nesnesinden kullanır. ASP.NET'in bir iş parçacığı bulmak, System.Net.HttpWebRequest sınıfı isteği sıraya yerine hata iletisini döndürür.

Pratik Çözüm

Bu soruna geçici bir çözüm için aşağıdaki yöntemlerden birini kullanın:
  • Try-catch bloğu kodu, özel durum yakalamak ve uygun biçimde işlenecek kullanın.
  • Özel durumun oluşmasını tutmak için sıraya alma mekanizması uygular.
  • ASP.NET, Microsoft ınternet ınformation Services 5.0 veya sonraki sürümü kullanıyorsanız, iş parçacığı havuzu boyutunu Machine.config yeniden dosya. Bunu yapmak için şu adımları izleyin:
    1. Machine.config dosyası %Systemroot% \Microsoft.NET\Framework\ Version \confıg klasöründen açın.
    2. Machine.config dosyasının <a1><processmodel></a1> bölümünde değerini yapılandırmakmaxWorkerThreads ve Maxıothreads öznitelikleri her CPU için işlemin iş parçacıklarının sayısı. Bu değer 25 tek işlemcili bir sunucuda, örneğin, ASP.NET çalışma zamanı uygulama programlama arabirimleri (Apı) işlem sınırını 25 olarak ayarlamak için kullanır. Iki işlemcili bir sunucuda sınırı 50'ye ayarlanır.

      Not Sınırları korumak için bir iş parçacığı havuzu artırmak, CPU kullanımını izler.
    3. Değişiklikleri Machine.config dosyasına kaydedin.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

  1. Microsoft Visual Studio .NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Visual Basic Projeleri veya Visual C# Projects altında Project Types ' ni tıklatın ve şablonları altında Console Application ' ı tıklatın.
  4. Kod Class1 kod penceresinde, proje tipine bağlı olarak aşağıdaki kodu değiştirin:

    Visual C# .NET kod
    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();
    		}
    	}
    }
    
    Visual Basic .NET kodu
    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. Hata Ayıkla) menüsünde, uygulamayı çalıştırmak için Başlat ' ı tıklatın. Kullanılabilir WorkerThreads 0 ulaştıktan sonra "Belirtiler" bölümünde listelenen hata iletisini alırsınız.

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Web sitelerini ziyaret edin:
Iş parçacığı havuzu, .NET Framework programlama
http://msdn2.microsoft.com/en-us/library/ms973903.aspx

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

Özellikler

Makale numarası: 815637 - Last Review: 26 Şubat 2014 Çarşamba - Gözden geçirme: 1.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbnamespace kbweb kbxml kbwnet kberrmsg kbconfig kbdev kbthread kbprb KB815637 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:815637

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