Timeout в System.Net.WebClient

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
571
Благодарностей
384
Баллы
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? И какие добавить доп. директивы?
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
930
Благодарностей
378
Баллы
63

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
571
Благодарностей
384
Баллы
63

Ахилес

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

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

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
571
Благодарностей
384
Баллы
63
в душе не чаю... :bn: никогда не пользовался WebClient...
значит ИИ версии 3.5 туповат, надо либо у 4-й модели спрашивать, либо гуглить как работать с WebClient.

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

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 140
Благодарностей
490
Баллы
83
Ответ от 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

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 140
Благодарностей
490
Баллы
83
Вообще, может имеет место быть попробовать RestSharp.
 
  • Спасибо
Реакции: DrunkDeath

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
571
Благодарностей
384
Баллы
63
Ответ от 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, чтобы установить таймаут для каждого запроса.

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

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