Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net core 3.1 HttpClient Error while copying content to a stream. / 19 сообщений из 19, страница 1 из 1
10.12.2020, 10:32
    #40026272
ther
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asp.net core 3.1 HttpClient Error while copying content to a stream.
алгоритм такой, был древний файловый сервер (получение и отправка файлов), потом появился веб проект и надо их подружить, но при пост запросе, если в содержимом файл, то получаю ошибку 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
10.12.2020, 11:34
    #40026292
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asp.net core 3.1 HttpClient Error while copying content to a stream.
c областью действия ваших using разберитесь, скобки явно не там
...
Рейтинг: 0 / 0
10.12.2020, 11:43
    #40026296
ther
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asp.net core 3.1 HttpClient Error while copying content to a stream.
я чистил код в редакторе форума, видимо, одну удалил, не критично для понимания кода
...
Рейтинг: 0 / 0
10.12.2020, 12:19
    #40026316
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asp.net core 3.1 HttpClient Error while copying content to a stream.
ther
Код: c#
1.
using (var client = new HttpClient() { BaseAddress = baseAddress })


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



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


Ну почему нельзя. Можно, но рекомендуется использовать фабрику.
...
Рейтинг: 0 / 0
10.12.2020, 12:42
    #40026323
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asp.net core 3.1 HttpClient Error while copying content to a stream.
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
10.12.2020, 12:44
    #40026327
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asp.net core 3.1 HttpClient Error while copying content to a stream.
hVostt
Ну почему нельзя.

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

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


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

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

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

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

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

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

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

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


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

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

ааааааааааааааааа
а вот там, где вы указали, реальная ошибка с четким пониманием того, что надо делать
спасибо огромное
Тебе об этом говорили еще утром 22245453
...
Рейтинг: 0 / 0
18.12.2020, 13:05
    #40029046
ivansmirnov2021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asp.net core 3.1 HttpClient Error while copying content to a stream.
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
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net core 3.1 HttpClient Error while copying content to a stream. / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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