EventSourceException без сведений о каждом журнале, но сам журнал все еще проходит

Итак, я использую SLAB, и у меня есть прослушиватель базы данных, выходящий из базы данных. Я тестирую один метод на источнике события. Проблема, с которой я сталкиваюсь, заключается в том, что журнал вставляется в базу данных так, как я этого хочу, но я также получаю журнал исключений перед каждой записью.

введите здесь описание изображения В моем окне вывода написано то же самое: "EventSourceException". Мне трудно понять, что такое исключение, не говоря уже о том, как его исправить.

Вот метод источника события:

[Event(2, Message = "ACCESS_ADMIN",
    Level = EventLevel.LogAlways,
    Keywords = Keywords.AdminAccess)]
public void LogAdminAccess(string userInfo, string resource, string clientIpAddress, bool succeeded)
{
    SetCurrentThreadActivityId(GetNewActivityId());
    WriteEventWithRelatedActivityId(2, GetRequestId(), userInfo, resource, clientIpAddress, succeeded);
}

Вот как инициализируется прослушиватель inproc:

var dbSemanticLogListener = SqlDatabaseLog.CreateListener(
    "MyComponent",
    PayliteRegistry.MainDatabaseConnectionString);

dbSemanticLogListener.EnableEvents(
   AprivaPciAuditEventSource.Log,
   EventLevel.LogAlways, 
    MyEnum.Keywords.AccountModified |
    MyEnum.Keywords.AdminAccess |
    MyEnum.Keywords.DatabaseAccess |
    MyEnum.Keywords.ApplicationStateChange);

И вызов регистратора:

MyLoggerClass.Log.LogAdminAccess(
    userInfo, 
    request.RequestUri.AbsolutePath, 
    request.GetClientIpAddress(), 
    true);

Любые идеи о том, в чем может быть проблема или, по крайней мере, как добраться до фактического исключения?

Другие биты не показаны

  • Этот класс EventSource запечатан
  • Я прошел и убедился, что методы GetNewActivityId() и GetRequestId() не вызывают исключение
  • Исключение отображается в окне вывода, когда выполняется WriteEventWithRelatedActivityId(..., но исключение не всплывает; похоже, это обрабатывается в базовом классе.

person Sinaesthetic    schedule 21.09.2015    source источник


Ответы (1)


Оказывается, что

  • Я использую связанные идентификаторы действий не по назначению
  • Чтобы это работало, вы должны указать EventOpCode в атрибуте события.
person Sinaesthetic    schedule 21.09.2015
comment
Вы нашли основную причину этой проблемы? Не могу сказать точно, но похоже, что у меня возникла та же проблема при вызове WriteEventWithRelatedActivityId после установки новой среды выполнения. - person Refraction; 10.11.2015
comment
Основная причина заключалась в том, что я не использовал его правильно. Идентификатор связанной активности предназначен для связывания потоков с их родительскими потоками. Но если вы собираетесь его использовать, вам нужно указать EventOpCode. Просто указав, что это заставило меня работать. - person Sinaesthetic; 10.11.2015
comment
Спасибо за ответ. Все наши события отмечены этим атрибутом. Я попытался воспроизвести проблему, которая у меня есть, на машине с рантаймом 4.5 - все в порядке. Так что похоже, что это вызвано 4.6 - person Refraction; 13.11.2015