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

Ö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
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
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.IOImports System.NetImports System.TextImports System.ThreadingImports System.Net.SocketsModule 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 SubEnd 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:
... catch deneyin.

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 815637 - Son İnceleme: 02/26/2014 23:29:55 - Düzeltme: 1.4

Microsoft ASP.NET 1.0, Microsoft ASP.NET 1.1

  • kbnosurvey kbarchive kbmt kbnamespace kbweb kbxml kbwnet kberrmsg kbconfig kbdev kbthread kbprb KB815637 KbMttr
Geri bildirim