2009-09-03 14 views
7

Benim asp.net uygulaması uzak DİNLENME sunucuya HttpWebRequest gönderme ve yanıt bekliyor ve ben aynı hata mesajının bir sürü böyle olduğu ortaya çıkarıldı:nasıl yakalamak HttpWebRequest zaman aşımı sonra altta yatan bağlantıları kapatmak için

Sistemi. Net.WebException: İşlem zaman aşımına uğradı. System.Net.HttpWebRequest.GetResponse() at

Bu durum yakalamak ve sonra doğrudan temel http bağlantısı kapatmak mümkün mü? ya da gerçekten bunu yapmak zorunda değilim çünkü ben zaten saklı olanı yanlış olarak ayarladım?

Teşekkürler.

Gerçekte başka bir soru, zaman aşımı istisnasının her zaman System.Net.HttpWebRequest.GetResponse(), adresinde olmasının, uygulamanın uzak sunucudan gelen yanıtı beklediği ve zaman aşımına kadar yanıt alamadığı anlamına gelir. olası sebep ne olabilir, ağ bağlantısı sabit değil mi? uzak sunucu yanıt vermiyor? diğer olası nedenler? İşte

kodudur:

System.Net.HttpWebResponse httpWebResponse = null; 
System.IO.Stream stream = null; 
XmlTextReader xmlTextReader = null; 
try 
{ 
    System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(request); 
    httpWebRequest.ReadWriteTimeout = 10000; 
    httpWebRequest.Timeout = 10000; 
    httpWebRequest.KeepAlive = false; 
    httpWebRequest.Method = "GET"; 
    httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse(); 
    stream = httpWebResponse.GetResponseStream(); 
    xmlTextReader = new XmlTextReader(stream); 
    xmlTextReader.Read(); 
    xmlDocument.Load(xmlTextReader); 
    //Document processing code. 
    //... 
} 
catch 
{ 
    //Catch blcok with error handle 
} 
finally 
{ 
    if (xmlTextReader != null) 
     xmlTextReader.Close(); 
    if (httpWebResponse != null) 
     httpWebResponse.Close(); 
    if (stream != null) 
     stream.Close(); 
} 
+0

Çözümü anladın? Ben aynı sorunla savaşıyorum. Fikirlerim tükendi. –

+0

@AlekseyBykov, işaretli cevabın probleminizi çözmediğini söylediniz? alternatifler? – Kiquenet

cevap

2

basit o IDisposal uygulamaması halinde o zaman bertaraf gerek olmamasıdır üstünlüğü başparmak.

+0

IDisposal uygulanmadı, ancak CLOSE_WAIT koşulunda çok fazla bağlantı olduğunu buldum, ne olduğundan emin olmadığımdan, kodumun temel bağlantıları doğru şekilde ele almamış olmasından endişeleniyorum. – machinegone

+0

Bence bu konuda Framework tasarımcılarına güvenmelisin. Daha fazla bilgi için http://stackoverflow.com/questions/716436/is-there-a-correct-way-to-dispose-of-a-httpwebrequest adresine bakın. Genel olarak bu doğru –

+2

rağmen o sorunu çözmez sorunu –

0

Ayrıca imha ettiğinizden de emin olun. blok yerine try-nihayet kullanılarak

Veya kullanmak :

using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { 
    using (var stream = httpWebResponse.GetResponseStream()) { 
     using (var xmlTextReader = new XmlTextReader(stream)) { 
      xmlDocument.Load(xmlTextReader); 
     } 
    } 
} 
+2

çözmez –

0

Yapabileceğiniz bir diğer şey üzerinde İptal() yöntemini çağırmak yani gibi bir hataya neden olduğunu bir HttpWebRequest :

catch (WebException we) 
{ 
    using (HttpWebResponse errorResp = we.Response as HttpWebResponse) 
    { 
    ... 
    } 
    request.Abort(); 
} 
+1

çözmez tepki nesne imha Bu sorunu –

İlgili konular