Добавленная служба с ограниченной областью выдает нулевую ошибку по одному и тому же запросу в промежуточном программномC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Добавленная служба с ограниченной областью выдает нулевую ошибку по одному и тому же запросу в промежуточном программном

Сообщение Anonymous »

Я создаю часть специального промежуточного программного обеспечения, которое будет использоваться для целей телеметрии. У этого промежуточного программного обеспечения будет служба, которую оно будет использовать для отслеживания различных журналов, созданных моим API, и как только будет запущен ответ на запрос, оно отправит следы в AppInsights.
Метод Invoke промежуточного программного обеспечения выглядит следующим образом:

Код: Выделить всё

public async Task InvokeAsync(HttpContext context)
{

_telemetryService.InitNewEvent();
_telemetryService.Add("path", context.Request.Path, null); // Add works here
await _next(context);
_telemetryService.Add("statusCode", context.Response.StatusCode, null); // Add throws null error here
_telemetryService.SendEvent(context.Response);
}
Отрывок из службы телеметрии

Код: Выделить всё

public class TelemetryService
{
private TelemetryClient _telemetryClient;

private List _currentTelemetryEventData;
private Dictionary _finalisedTelemetryEventData;

private string _eventName;
private string _apiName = "pmapi";

public TelemetryService(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}

public void InitNewEvent()
{
_currentTelemetryEventData = new List();
Console.WriteLine("New telemetry event inited");
}

public void Add(string key, object data, SeverityLevel? severityLevel)
{
_currentTelemetryEventData.Add(new TelemetryTrace
{
Key = key,
Data = data,
SeverityLevel = severityLevel
});
}
}
Новое событие, которое представляет собой просто словарь, инициируется промежуточным программным обеспечением и добавленным к нему журналом. Затем промежуточное программное обеспечение ожидает ответа от конвейера, в течение этого времени контроллер API добавит к событию другие журналы, а затем к событию добавляется код состояния, и событие отправляется, когда конвейер возвращается к промежуточному программному обеспечению.
Однако я заметил, что если я добавляю telemetryService в качестве ограниченной или временной службы, словарь, в котором хранятся данные журнала, возвращается к нулю после ожидания _next(context) был вызван.
Это имеет смысл для временного процесса, но с определением области видимости. Объекты с областью действия одинаковы в пределах запроса, но различаются в разных запросах. Я ожидал что мое состояние словаря будет сохранено. Но это происходит только с синглтоном. Почему все происходит не так, как я ожидаю?

Подробнее здесь: https://stackoverflow.com/questions/640 ... hin-middle
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»