Timeout в System.Net.WebClient

  • Автор темы Автор темы DrunkDeath
  • Дата начала Дата начала

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
616
Реакции
442
Баллы
63
Доброго времени суток. Столкнулся с такой проблемой. Пытаюсь загрузить видео в вк, использую кубик, которым всегда пользовался для загрузки, но тут размер видео побольше и не хватает стандартных 100 секунд. Вот код:

C#:
Развернуть Свернуть Копировать
System.Net.WebClient webClient = new System.Net.WebClient();

var response = webClient.UploadFile(project.Variables["clean_upload_url"].Value, project.Variables["Video_path"].Value);

return System.Text.Encoding.UTF8.GetString(response);

Как сюда добавить TimeOut? И какие добавить доп. директивы?
 
такие простые вопросы надо у ИИ спрашивать ;-)

проверяй....

115937
 
Да я чат тож мурыжил. Вот такую ошибку выбивает.
Посмотреть вложение 115938
Что она? Куда и почему мне не понятно. Или директивы какие то добавить или ещё что.
в душе не чаю... :bn: никогда не пользовался WebClient...
значит ИИ версии 3.5 туповат, надо либо у 4-й модели спрашивать, либо гуглить как работать с WebClient.

вот на форуме подымали этот вопрос https://zennolab.com/discussion/threads/api-video-vkontakte.32764/post-420016
получается что у WebClient нет настроек таймаута. значит надо рыть есть ли таймаут у UploadFile или HttpWebRequest который используется в WebClient
 
в душе не чаю... :bn: никогда не пользовался WebClient...
значит ИИ версии 3.5 туповат, надо либо у 4-й модели спрашивать, либо гуглить как работать с WebClient.

вот на форуме подымали этот вопрос https://zennolab.com/discussion/threads/api-video-vkontakte.32764/post-420016
получается что у WebClient нет настроек таймаута. значит надо рыть есть ли таймаут у UploadFile или HttpWebRequest который используется в WebClient
Да, только не очень понятно как в зенку всё это впихнуть) Буду искать дальше варианты
 
Ответ от 4-й версии:

Для установки таймаута при использовании System.Net.WebClient в C#, вам потребуется создать производный класс от WebClient и переопределить свойство WebRequest.Timeout. К сожалению, WebClient напрямую не предоставляет возможности установить таймаут, но это можно сделать через наследование.

Вот пример, как вы можете это сделать:


C#:
Развернуть Свернуть Копировать
using System;
using System.Net;

public class WebClientWithTimeout : WebClient
{
    // Устанавливаем таймаут в миллисекундах
    public int Timeout { get; set; }

    public WebClientWithTimeout()
    {
        // Значение по умолчанию, например 300000 миллисекунд (5 минут)
        this.Timeout = 300000;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = this.Timeout;
        }
        return request;
    }
}

Теперь вы можете использовать WebClientWithTimeout вместо стандартного WebClient:
C#:
Развернуть Свернуть Копировать
using (var webClient = new WebClientWithTimeout())
{
    webClient.Timeout = 600000; // Установите таймаут в миллисекундах, например 10 минут
    var response = webClient.UploadFile(project.Variables["clean_upload_url"].Value, project.Variables["Video_path"].Value);
    return System.Text.Encoding.UTF8.GetString(response);
}

В этом примере WebClientWithTimeout наследуется от WebClient и переопределяет метод GetWebRequest, чтобы установить таймаут для каждого запроса.

Обратите внимание, что таймаут устанавливается в миллисекундах, поэтому убедитесь, что вы устанавливаете его достаточно большим для загрузки больших файлов.
 
  • Оценить
Реакции: DrunkDeath
Ответ от 4-й версии:

Для установки таймаута при использовании System.Net.WebClient в C#, вам потребуется создать производный класс от WebClient и переопределить свойство WebRequest.Timeout. К сожалению, WebClient напрямую не предоставляет возможности установить таймаут, но это можно сделать через наследование.

Вот пример, как вы можете это сделать:


C#:
Развернуть Свернуть Копировать
using System;
using System.Net;

public class WebClientWithTimeout : WebClient
{
    // Устанавливаем таймаут в миллисекундах
    public int Timeout { get; set; }

    public WebClientWithTimeout()
    {
        // Значение по умолчанию, например 300000 миллисекунд (5 минут)
        this.Timeout = 300000;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = this.Timeout;
        }
        return request;
    }
}

Теперь вы можете использовать WebClientWithTimeout вместо стандартного WebClient:
C#:
Развернуть Свернуть Копировать
using (var webClient = new WebClientWithTimeout())
{
    webClient.Timeout = 600000; // Установите таймаут в миллисекундах, например 10 минут
    var response = webClient.UploadFile(project.Variables["clean_upload_url"].Value, project.Variables["Video_path"].Value);
    return System.Text.Encoding.UTF8.GetString(response);
}

В этом примере WebClientWithTimeout наследуется от WebClient и переопределяет метод GetWebRequest, чтобы установить таймаут для каждого запроса.

Обратите внимание, что таймаут устанавливается в миллисекундах, поэтому убедитесь, что вы устанавливаете его достаточно большим для загрузки больших файлов.
Ох спасибо огромное)) Помогло. Всё оказалось проще, чем я думал
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)