powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net core 3.1 HttpClient Error while copying content to a stream.
19 сообщений из 19, страница 1 из 1
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026272
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
алгоритм такой, был древний файловый сервер (получение и отправка файлов), потом появился веб проект и надо их подружить, но при пост запросе, если в содержимом файл, то получаю ошибку Error while copying content to a stream. Второй день не могу побороть

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
[HttpPost]
    public async Task<string> UploadFile(string data) {
      dynamic execResult = null;
      TDecryptedCookie cookie = TAuthorization.GetCookieInfo(Request);
      dynamic json = TTools.Deserialize(data);


      string url = $"{TConst.FileServerHost}FileService/Upload?data={{ \"folder\":\"{json.F_Folder.Value}\", \"filename\":\"{json.F_FileName.Value}\",\"personID\":{cookie.PersonID}}}";


      dynamic result;
      var baseAddress = new Uri(url);

      try {
        using (var client = new HttpClient() { BaseAddress = baseAddress }) {
          client.DefaultRequestHeaders.Add("Authorization", Request.Headers["Authorization"].ToString()); 
          using var form = new MultipartFormDataContent();

          foreach (var file in Request.Form.Files) {
            //обработка файла
            byte[] fileBytes;

            using var ms = new MemoryStream();
            file.CopyTo(ms);
            fileBytes = ms.ToArray();
            using var fileContent = new ByteArrayContent(fileBytes);
            form.Add(fileContent, "file", file.FileName);
          }
          using var response = await client.PostAsync(baseAddress, form);   // <====== Error while copying content to a stream.
          response.EnsureSuccessStatusCode();
          var responseContent = await response.Content.ReadAsStringAsync();
          result = await TTools.Deserialize(responseContent);

          
      } catch (Exception e) {
        result = new { result = false, message = e.Message };
      }
      return result;
    }
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026292
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c областью действия ваших using разберитесь, скобки явно не там
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026296
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я чистил код в редакторе форума, видимо, одну удалил, не критично для понимания кода
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026316
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther
Код: c#
1.
using (var client = new HttpClient() { BaseAddress = baseAddress })


Вот такое в ASP.NET приложении делать вообще ни в коем случае нельзя! Читаем вот тут про это и еще про вот это .
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026319
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
ther
Код: c#
1.
using (var client = new HttpClient() { BaseAddress = baseAddress })



Вот такое в ASP.NET приложении делать вообще ни в коем случае нельзя! Читаем вот тут про это и еще про вот это .


Ну почему нельзя. Можно, но рекомендуется использовать фабрику.
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026323
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther
Код: c#
1.
2.
3.
catch (Exception e) {
    result = new { result = false, message = e.Message };
}


В этом не намного больше пользы, чем от вообще пустого catch. Напиши нормальный обработчик - тогда ты сразу будешь видеть из-за чего у тебя ошибка возникает, и твоя ли она, или сервера. А не просто "Error while copying content to a stream."
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026327
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Ну почему нельзя.

Потому что нельзя - прими как есть
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026332
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Ну почему нельзя.

Потому что нельзя - прими как есть


Да ладно, это же работает )
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026336
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Ну почему нельзя.

Потому что нельзя - прими как есть

Если серьезно, то стандартная реализация IHttpClientFactory cоздает HttpClient не примитивным new(), а переиспользуя HttpClientHandler-ы. Если у тебя создается и диспозится много инстансов HttpClient, то имеет большое значение. Для десктопного приложения это пофиг, но у автора явно ASP.NET что видно по оттрибуту [HttpPost].
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026337
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Да ладно, это же работает )

https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=net-5.0 HttpClient is intended to be instantiated once and re-used throughout the life of an application. Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads. This will result in SocketException errors.

По ссылке, что я выше давал как раз объясняется почему это происходит.

HttpClientFactory делает все просто хитрее, чтобы не делать жуткий singleton - оно возвращает каждый раз новый инстанс, но все эти инстансы используют один и тот же HttpClientHandler (по отдельному хендлеру для каждого ендпойнта).
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026384
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Ну не совсем хендлер. Суть в переиспользовании сокетов.
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026405
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Суть в переиспользовании сокетов.

Вот тут статья, где подетальней разбирается.

Ты же говорил, что у вас несколько десятков тысяч микросервисов - для вас это как "отче наш" должно быть
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026437
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
hVostt
Суть в переиспользовании сокетов.

Вот тут статья, где подетальней разбирается.

Ты же говорил, что у вас несколько десятков тысяч микросервисов - для вас это как "отче наш" должно быть


Так мы давно на фабрику перешли.. Но до фабрики жили неплохо, просто это был синглтон, но в этом свои проблемы есть )
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026452
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, пасиб, почитаю, попробую переписать код. Но беда в том, что он валился на первом же запросе...
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026467
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переписал, та же фигня. проблема в том, что пост проходит, если не крепить файлы, как только крепанул - ошибка
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026469
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InnerException пробовал смотреть?
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026476
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
~!@#$%$^

ааааааааааааааааа
а вот там, где вы указали, реальная ошибка с четким пониманием того, что надо делать
спасибо огромное
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40026563
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther
Shocker.Pro
~!@#$%$^

ааааааааааааааааа
а вот там, где вы указали, реальная ошибка с четким пониманием того, что надо делать
спасибо огромное
Тебе об этом говорили еще утром 22245453
...
Рейтинг: 0 / 0
asp.net core 3.1 HttpClient Error while copying content to a stream.
    #40029046
ivansmirnov2021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat
hVostt
Да ладно, это же работает )

https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=net-5.0 HttpClient is intended to be instantiated once and re-used throughout the life of an application. Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads. This will result in SocketException errors.

По ссылке, что я выше давал как раз объясняется почему это происходит.

HttpClientFactory делает все просто хитрее, чтобы не делать жуткий singleton - оно возвращает каждый раз новый инстанс, но все эти инстансы используют один и тот же HttpClientHandler (по отдельному хендлеру для каждого ендпойнта).
тут народ не использует .Core 3?
Типа заюзать DI Singeton, Scoped or Transient?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net core 3.1 HttpClient Error while copying content to a stream.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]