Мой код выглядит примерно так:
private readonly HttpClient _httpClient;
public SomeConstructor(HttpClient httpClient){
_httpClient = httpClient;
}
public void SomeMethod(string reqUrl, string payload){
var result = GetResponseStringAsync(reqUrl, payload).GetAwaiter().GetResult();
// do something with result
}
private async Task<string> GetResponseStringAsync(string reqUrl, string payload){
using (var req = new HttpRequestMessage("POST", reqUrl)){
using (var content = new StringContent(payload)){
// Attach content headers here (specific for each request)
req.Content = content;
// Attach request headers here (specific for each request)
// using req.Headers.TryAddWithoutValidation()
using (var response = await _httpClient.SendAsync(req))
{
return await response.Content.ReadAsStringAsync();
}
}
}
}
Мне нужно отправлять запросы API с разными подписанными заголовками на запрос, в противном случае я вернусь 401 (неавторизовано). Тем не менее, когда я отправляю один запрос, я всегда получаю 200, указывая, что заголовки авторизации отправляются правильно. Однако, если я отправляю несколько запросов одновременно (скажем, с уровнем параллелизма, равным 10), только 1 запрос вернул 200, тогда как остальные 9 получили 401. Однако, если я нажму на эти 9 ссылок по отдельности, я получу 200 по каждому из них, как и ожидалось.
Мне кажется, что почему-то существует проблема параллелизма, которая приводит к тому, что соответствующие заголовки не присоединяются на их соответствующие запросы, даже когда я создаю новое HttpRequestMessage для каждого запроса. HttpClient и HttpRequestMessage предположительно являются поточно-ориентированными, но кто-то может объяснить, почему я по-прежнему получаю странные результаты при отправке нескольких запросов одновременно?
Add :
- У меня есть что-то вроде этого в моем AppHost:
Container.Register<ISomeConstructor>(x => new SomeConstructor(new HttpClient()));
, поэтому я уверен, что случайно не изменяю клиента где-либо еще - Установка блокировки вокруг HttpClient (непосредственно перед SendAsyn c call) заставляет его работать и возвращает 200 с 100% времени, еще больше убеждая меня, что это проблема параллелизма
- Я развертываю и работаю на Mono 6.8.0.105 - это может быть проблема Mono? Я не смог найти никаких проблем / сообщений об ошибках по этому вопросу, хотя