Операция может дестабилизировать среду выполнения Enterprise Library 6

Я создал консольное приложение.NET 4.5, чтобы опробовать биты семантической регистрации в новом Ent Lib v6. Используя пример кода из PDF:

var listener2 = new ObservableEventListener();
listener2.EnableEvents( EventSourceCore.Log , EventLevel.LogAlways , Keywords.All );
SinkSubscription<SqlDatabaseSink> subscription = listener2.LogToSqlDatabase( "Demo Semantic Logging Instance" , ConfigurationManager.AppSettings["mdbconn"] );

Запуск кода немедленно выдает ошибку "Операция может дестабилизировать время выполнения". Глядя на трассировку стека в помощнике по исключениям из VS2012, я вижу

  at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy`1..ctor(Int32 retryCount, TimeSpan minBackoff, TimeSpan maxBackoff, TimeSpan deltaBackoff)
   at Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Sinks.SqlDatabaseSink..ctor(String instanceName, String connectionString, String tableName, TimeSpan bufferingInterval, Int32 bufferingCount, Int32 maxBufferSize, TimeSpan onCompletedTimeout)
   at Microsoft.Practices.EnterpriseLibrary.SemanticLogging.SqlDatabaseLog.LogToSqlDatabase(IObservable`1 eventStream, String instanceName, String connectionString, String tableName, Nullable`1 bufferingInterval, Int32 bufferingCount, Nullable`1 onCompletedTimeout, Int32 maxBufferSize)
   at svc2.Program.LogPrep() in c:\cos\Program.cs:line 66
   at svc2.Program.Main(String[] args) in c:\cos\Program.cs:line 23
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

Глядя на исходный код Entlib, строка 32 в SqlDatabaseSink.cs показывает

 private readonly RetryPolicy retryPolicy = new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(5, TimeSpan.FromSeconds(1), TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(5));

Переход к строке 59 в RetryPolicyGeneric.cs, который показывает

 public RetryPolicy(int retryCount, TimeSpan minBackoff, TimeSpan maxBackoff, TimeSpan deltaBackoff)
            : base(new T(), retryCount, minBackoff, maxBackoff, deltaBackoff)

Но я не вижу ничего похожего на неявное приведение, которое могло бы вызвать проблему, которое было найдено в других сообщениях SO.

Что я упустил? Кто-нибудь на самом деле видел работу блока регистрации "из коробки"?

Спасибо,

1 ответ

Решение

Проблема в основных библиотеках MS.

http://support.microsoft.com/kb/2748645

Это содержит патч для проблемы. Я сжег несколько часов на этом. Надеюсь, следующий человек, который попробует это, не потеряет столько же времени.

Другие вопросы по тегам