2012-02-28 3 views
0
Stream FeedReader(string url_) 
{ 
    var url = url_; 

    var USER = "username"; 
    var PASS = "password"; 


    //var encoded = TextToBase64(USER + ":" + PASS); 

    WebRequest myWebRequest = WebRequest.Create(url); 
    // myWebRequest.Method = "POST"; 
    //myWebRequest.ContentType = "application/x-www-form-urlencoded"; 
    myWebRequest.PreAuthenticate = true; 
    myWebRequest.Credentials = new NetworkCredential(USER, PASS); 
    myWebRequest.Timeout = 10000; 
    //WebResponse response = myWebRequest.GetResponse(); 
    var stream = myWebRequest.GetResponse().GetResponseStream() ; 
    return stream; 
} 

Я понятия не имею, почему у меня всегда была ошибка (время соединения) после вызова этой функции, я надеюсь, что кто-то может помочь. Пожалуйста, не стесняйтесь, чтобы помочь мне, спасибо очень очень много ......GetResponse от объекта webrequest не удается выполнить проверку подлинности

public static List<Item> ParseAtom2(Stream stream) 
    { 
     XDocument doc = XDocument.Load(stream);//("atom.xml"); 
     XNamespace ns = "http://www.w3.org/2005/Atom"; 

     var entries = doc.Root 
      .Descendants(ns + "entry") 
      .Select(item => new Item 
      { 
       FeedType = FeedType.Atom, 
       Content = item.Element(ns + "content").Value, 
       Link = "",//(string)item.Element(ns + "link").Attribute("href").Value, 
       PublishDate = DateTime.Parse(item.Element(ns + "published").Value), 
       Title = item.Element(ns + "title").Value 
      }); 
     stream.Close(); 
     return entries.ToList(); 
    } 

То есть вторая функция Я использую поток возвращается из первого в качестве аргумента. И я всегда получаю ошибку соединения с таймаутом.

ответ

2

Я предполагаю, что вы не закрываете поток, который, надеюсь, также закрывает ответ. (Вы обычно отдаете ответ явно.) Я бы по крайней мере рассмотрел, создав копию потока в этом методе. Это легко в .NET 4:

using (var response = myWebRequest.GetResponse()) 
{ 
    MemoryStream copy = new MemoryStream(); 
    using (var responseStream = response.GetResponseStream()) 
    { 
     responseStream.CopyTo(copy); 
    } 
    copy.Position = 0; 
    return copy; 
} 

Если вы не располагаете ресурсами должным образом, пул соединений будет думать, что вы все еще используете подключение, и есть ограничение на количество подключений на хост.

(Предполагая, что я прав, и вы не закрывая поток в другом месте, вы должны сделать это тоже. - в общем, убедитесь, что вы всегда закрой ресурсы)

+0

Спасибо, но я хотел, чтобы я понял, что вы имею в виду. Ialways получает ошибку таймаута соединения, и я не подключаюсь к сайту – Giovani

+0

@Giovani: Какой бит? Вы извлекаете поток - выполняете ли вы это с помощью инструкции 'using' или удаляете/закрываете поток любым другим способом? –

+0

Я буду использовать этот поток в качестве аргумента в другой функции, и я закрою его после получения данных из него – Giovani

Смежные вопросы