2015-09-21 5 views
2

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

enter image description here В моем окне вывода указано, что именно то же самое, «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(..., но исключение не пузырится; он, по-видимому, обрабатывается в базовом классе.

ответ

2

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

  • Я использую связанные с идентификаторами активности на что-то другое, чем то, что они были предназначены
  • Для того, чтобы он работал, необходимо указать EventOpCode в случае атрибут.
+0

Вы нашли основную причину этой проблемы? Не могу сказать точно, но кажется, что я начал иметь ту же проблему при вызове WriteEventWithRelatedActivityId после установки новой среды выполнения. – Refraction

+0

Основной причиной было то, что я не использовал его правильно. Связанный идентификатор активности предназначен для привязки * потоков * к их родительским потокам. Но если вы собираетесь использовать его вообще, вы должны указать EventOpCode. Просто указав, что заставил его работать на меня. – Sinaesthetic

+0

Благодарим за сообщение. Все наши события отмечены этим атрибутом. Я попытался воспроизвести проблему, которая у меня есть на машине с 4.5 runtime - все в порядке. Похоже, что это вызвано 4.6 – Refraction