Система. Сеть. WebException: базовое соединение было закрыто: соединение было неожиданно закрыто

можно создать дополнительный метод :

public static class DictionaryExtensions
{
    public static void RemoveAll(this IDictionary dict, 
        Func predicate)
    {
        var keys = dict.Keys.Where(k => predicate(dict[k])).ToList();
        foreach (var key in keys)
        {
            dict.Remove(key);
        }
    }
}

...

dictionary.RemoveAll(x => x.Member == foo);

9
задан SteveC 4 June 2013 в 12:19
поделиться

4 ответа

Некоторое время назад я столкнулся с тем же исключением, и я помню, что это происходит в некоторых случаях из-за ошибки в .NET. Вы можете обойти это, установив для Timeout и ReadWriteTimeout запроса более высокие значения или установив KeepAlive на false.

Это будет только обходной путь, поэтому я предлагаю вам попытаться найти реальную основную причину, прежде чем что-либо делать .

Я постараюсь найти несколько веб-ссылок, а пока посмотрите Загрузка больших файлов (WebException: соединение было неожиданно закрыто)

1
ответ дан 4 December 2019 в 19:35
поделиться

Если вы используете .NET 2.0 или выше, вы можете включить трассировку сети и посмотреть, что на самом деле происходит по сети. Таким образом вы сможете получить дополнительную информацию об этом конкретном исключении.

См. Дополнительную информацию по следующей ссылке, http://msdn.microsoft.com/en-us/library/hyb3xww8%28VS.80%29.aspx

6
ответ дан 4 December 2019 в 19:35
поделиться

Похоже на возможные проблемы:

  1. Вы никогда не назначаете созданный прокси-сервер своему HttpWebRequest

     WebProxy ** proxy ** = new WebProxy ("http: // proxy: 80 /", правда);
    HttpWebRequest webRequest = WebRequest.Create (LOGIN_URL) как HttpWebRequest;
    //proxy.Credentials = new NetworkCredential ("myusername", "mypassword", "domain"); 
    // webRequest.Proxy = proxy;
    webRequest.Proxy = ** WebRequest.DefaultWebProxy **;
    

    Вы должны назначить это так:

     WebProxy proxy = new WebProxy ("http: // proxy: 80 /", true);
    HttpWebRequest webRequest = WebRequest.Create (LOGIN_URL) как HttpWebRequest;
    webRequest.Proxy = прокси;
    

    (обратите внимание на разницу в последней строке)

  2. Вы используете порт 80 на вашем прокси. Уверены, что это правильно? Многие прокси-серверы используют порт 8080.

0
ответ дан 4 December 2019 в 19:35
поделиться
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

это решение

-1
ответ дан 4 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: