Добрый день. Уже 2 дня не могу решить данную проблему
У меня есть 2 сервиса, которые контактируют между собой CoreService и MidService.
Принцип работы: MidService делает некую работу с данными и отправляет результаты на CoreService httpPost запросами.
Моя задача: сделать буфер сообщений для тех случаев, когда CoreService отключен. После того, как CoreService будет онлайн и два сервиса вновь соединятся друг с другом, я должен буду из этого буфера всё отправить на CoreService.
Моя реализация: Я создал очередь HttpRequestMessage
public Queue<HttpRequestMessage> HttpRequestMessagesQueue = new Queue<HttpRequestMessage>();
Теперь, если сообщение из MidService не отправилось в CoreService, то оно начинает будет храниться в очереди.
После того, как сервисы вновь соединяются, начинается проверка очереди:
void ProcessCoreMessage(string jsonStr)
{
try
{
if(HttpServer.HttpRequestMessagesQueue.Count != 0)
{
HttpServer.CheckQueue();
}
public async Task<HttpResponseMessage> CheckQueue()
{
HttpResponseMessage response = null;
try
{
var request = HttpRequestMessagesQueue.Peek();
HttpClient httpClient = new HttpClient();
response = await httpClient.SendAsync(request);
}
catch(Exception ex)
{
_logger.Debug($"{DateTime.Now.ToLongTimeString()} ||||| {ex.InnerException}");
}
return response;
}
Возникает исключение:
25.12 14:54 | DEBUG | 14:54:12 ||||| System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Net.Http.StringContent'.
at System.Net.Http.HttpContent.CheckDisposed()
at System.Net.Http.HttpContent.CopyToAsync(Stream stream, TransportContext context, CancellationToken cancellationToken)
at System.Net.Http.HttpConnection.SendRequestContentAsync(HttpRequestMessage request, HttpContentWriteStream stream, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
P.S. Тут показан пример для одного элемента очереди. Я понимаю, что нужно проходиться циклом foreach по всей очереди и тд. Прошу вашей помощи