System.Net.WebClient Невозможно записать данные в транспортное соединение

Я пытаюсь выполнить простую загрузку многостраничной формы, используя System.Net.WebClient и Basic Authentication.

У меня были некоторые проблемы с этим, и я использовал Fiddler2 для отладки некоторых ошибок 401, которые у меня были с сервисом.

Я пришел к приведенному ниже коду, который работает успешно, пока работает Fiddler2, но терпит неудачу, когда это не так, со следующей ошибкой:

«Невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным узлом».

Код выглядит следующим образом:

    var wc = new MyWebClient();
    var cc = new System.Net.CredentialCache();
    cc.Add(new Uri(uri), "Basic", new System.Net.NetworkCredential(user, pass));
    wc.Credentials = cc;
    System.Net.ServicePointManager.Expect100Continue = false;
    wc.UploadFile(uri +  folder, file);
    wc.DownloadString(uri + folder).Dump();
    return;

class MyWebClient : System.Net.WebClient
{
    protected override System.Net.WebRequest GetWebRequest(Uri address)
    {
        System.Net.WebRequest request = base.GetWebRequest(address);
        if (request is System.Net.HttpWebRequest)
        {
            (request as System.Net.HttpWebRequest).KeepAlive = false;
        }
        return request;
    }
}

person Aaron    schedule 10.09.2010    source источник


Ответы (1)


Вы отключаете Keep Alive, когда используете клиент дважды. Я считаю, что это ваша проблема.

Что произойдет, если вы удалите бит загрузки, оставив только загрузку?

ОБНОВЛЕНИЕ

Я знаю, что использование non-basic/digest включает в себя круговое путешествие и не будет работать, если для keep-alive установлено значение false, но не уверен насчет basic.

person Aliostad    schedule 10.09.2010
comment
Привет Алиостад, бит загрузки работает нормально. Загрузка не работает независимо от того, есть загрузка или нет. Я просто пытаюсь автоматизировать загрузку в простую форму, немного смущенный тем, что что-то настолько простое поставило меня в тупик. Думал, что это может быть как-то связано с PreAuthenticate, и попробовал WebRequest в блоге Рика Страла @ west-wind.com/weblog/posts/243915.aspx - person Aaron; 11.09.2010
comment
Я знаю о вышеперечисленных факторах, но проблема не в них. Тем не менее, я приму этот ответ, поскольку предполагаю, что это что-то идиосинкразическое с функциональностью, подобной WebDAV, на http://*.mysecurebackup.net/. Это то, что я хотел запустить, чтобы программно загружать на свой JungleDisk через WebClient. Если кому-то нужны данные доступа, чтобы они могли попытаться/реплицировать вышеперечисленное самостоятельно, я более чем счастлив предоставить их, просто напишите мне. - person Aaron; 30.10.2010