Seeking assistance with EntLib 3.1 to 4.1 conversion issues, and missing documentation for Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentationListener class

Topics: Enterprise Library Core
Jan 13, 2011 at 9:02 PM

Hello,

I am running out of ideas for places to look, so I wanted to see if any of you could spark some new ideas for the issues I am having while converting Enterprise Library v3.1 to v4.1.  (Hopefully even a solution!)

It appears to be breaking while building a configuration based object (see line 68 at bottom).

I know I have been pretty vague to begin with, but please let me know if there is further information needed to assist me with this issue.  Depending on what type of information is requested, I may need to respond in a less public medium.

The first problem occurs when performance counters are enabled in the instrumentationConfiguration block.

Here is the trace it is returning:

{Microsoft.Practices.ObjectBuilder2.BuildFailedException: The current build operation (build key Build Key[Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter, null]) failed: The current build operation (build key Build Key[Microsoft.Practices.EnterpriseLibrary.Data.Database, MyDB]) failed: Exception has been thrown by the target of an invocation. (Strategy type InstrumentationStrategy, index 3) (Strategy type ConfiguredObjectStrategy, index 2) ---> Microsoft.Practices.ObjectBuilder2.BuildFailedException: The current build operation (build key Build Key[Microsoft.Practices.EnterpriseLibrary.Data.Database, MyDB]) failed: Exception has been thrown by the target of an invocation. (Strategy type InstrumentationStrategy, index 3) ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: The requested Performance Counter is not a custom counter, it has to be initialized as ReadOnly.

   at System.Diagnostics.PerformanceCounter.Initialize()

   at System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly)

   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.EnterpriseLibraryPerformanceCounterFactory.CreateCounter(String categoryName, String counterName, String[] instanceNames)

   at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationListener.CreatePerformanceCounters(String[] instanceNames)

   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentationListener.Initialize(Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter, String[] instanceNames)

   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentationListener..ctor(String[] instanceNames, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter)

   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentationListener..ctor(String instanceName, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter)

   at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationListener..ctor(String instanceName, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter)

   at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationListener..ctor(String instanceName, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, String applicationInstanceName)

   --- End of inner exception stack trace ---

   at System.RuntimeMethodHandle._InvokeConstructor(Object[] args, SignatureStruct& signature, IntPtr declaringType)

   at System.RuntimeMethodHandle.InvokeConstructor(Object[] args, SignatureStruct signature, RuntimeTypeHandle declaringType)

   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)

   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)

   at System.Activator.CreateInstance(Type type, Object[] args)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ExplicitInstrumentationAttacher.BindInstrumentation()

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationAttachmentStrategy.BindInstrumentationTo(Object createdObject, Object[] constructorArgs, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationAttachmentStrategy.AttachInstrumentation(ArgumentGenerator arguments, Object createdObject, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationAttachmentStrategy.AttachInstrumentation(String instanceName, Object createdObject, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationStrategy.PreBuildUp(IBuilderContext context)

   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)

   --- End of inner exception stack trace ---

   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)

   at Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerAssembler.Assemble(IBuilderContext context, TraceListenerData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.AssemblerBasedObjectFactory`2.Create(IBuilderContext context, TConfiguration objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.TraceListenerCustomFactory.Create(IBuilderContext context, TraceListenerData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.AssemblerBasedCustomFactory`2.Create(IBuilderContext context, String name, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.TraceListenerCustomFactory.Create(IBuilderContext context, String name, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache, TraceListenerCache traceListenersCache)

   at Microsoft.Practices.EnterpriseLibrary.Logging.LogSourceCustomFactory.Create(IBuilderContext context, TraceSourceData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache, TraceListenerCache traceListenersCache)

   at Microsoft.Practices.EnterpriseLibrary.Logging.LogWriterStructureHolderCustomFactory.CreateObject(IBuilderContext context, String name, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Logging.LogWriterCustomFactory.CreateObject(IBuilderContext context, String name, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfiguredObjectStrategy.PreBuildUp(IBuilderContext context)

   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)

   --- End of inner exception stack trace ---

   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)

   at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)

   at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp[TTypeToBuild](IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)

   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](IReadWriteLocator locator, ILifetimeContainer lifetimeContainer, IConfigurationSource configurationSource)}

 

 The second problem occurs when I have event logging enabled (and performance counters disabled) in the instrumentationConfiguration block.

Here is that trace:

Microsoft.Practices.ObjectBuilder2.BuildFailedException: The current build operation (build key Build Key[TheNamespace.IAction, RetrieveInfo]) failed: Constructor on type 'TheNamespace.Instrumentation.ActionInstrumentationListener' not found. (Strategy type InstrumentationStrategy, index 3)

System.MissingMethodException: Constructor on type 'TheNamespace.Instrumentation.ActionInstrumentationListener' not found.  

at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)  

at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)  

at System.Activator.CreateInstance(Type type, Object[] args)   at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ExplicitInstrumentationAttacher.BindInstrumentation()  

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationAttachmentStrategy.BindInstrumentationTo(Object createdObject, Object[] constructorArgs, ConfigurationReflectionCache reflectionCache)  

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationAttachmentStrategy.AttachInstrumentation(ArgumentGenerator arguments, Object createdObject, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)  

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationAttachmentStrategy.AttachInstrumentation(String instanceName, Object createdObject, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)  

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.InstrumentationStrategy.PreBuildUp(IBuilderContext context)  

at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)  

--- End of inner exception stack trace ---  

at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)  

at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)  

at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp[TTypeToBuild](IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)  

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](IReadWriteLocator locator, ILifetimeContainer lifetimeContainer, String id, IConfigurationSource configurationSource)  

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](String id, IConfigurationSource configurationSource)  

at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](String id)   at [METHOD] in [FILENAME]:line 68

 Here is line 68:

 IAction myAction = EnterpriseLibraryFactory.BuildUp<IAction>("RetrieveInfo");

 

Additionally, after reviewing these errors (specifically the one regarding an instrumentation listener), I sought out official documentation for the following classes residing in the Enterprise Library 4.1 framework, but with no success:

microsoft.practices.enterpriselibrary.common.instrumentation.instrumentationlistener

I noticed that this documentation is missing from the website:

http://msdn.microsoft.com/en-us/library/ff647292.aspx

 

Is there a reason this class is not documented?

 

Any ideas/advice would be very much appreciated!


Thanks,

Jason

Jan 13, 2011 at 9:09 PM

Sarah Urmeneta (AvanadeSupport) suggested the following issues in a previous discussion, but did not provide a solution to my problem yet:

On your first problem, did you run the InstallServices.bat file in your machine?  You'll get this file after installing Enterprise Library.

 Yes, I have run InstallServices.bat file on the C:\EntLib41Src\Blocks\ folder.  I am assuming this is the correct method for doing this?

On the second one, did you include a reference to the ObjectBuilder assembly?

I have included a reference to the ObjectBuilder2 assembly in the projects where it should be.

 

Thanks.

Jan 14, 2011 at 1:00 AM

If you're using the strongly-named assemblies (the one from Program Files\Microsoft Enterprise Library 4.1 - October 2008\bin folder), then you should run the InstallServices.bat from the Program Files\Microsoft Enterprise Library 4.1 - October 2008.  You can also run it by selecting Install Instrumentation from Start -> All Programs -> Microsoft patterns and practices -> Enterprise Library 4.1 - October 2008.  But make sure to uninstall first the one which you previously installed by running again the InstallServices.bat file from C:\EntLib41Src\Blocks folder.

On the second item, does that code previously works on EntLib 3.1?  Have you tried placing a breakpoint on your the custom factory for your IAction interface and see if it gets called at all?

 

Sarah Urmeneta
Global Technologies and Solutions
Avanade, Inc.
entlib.support@avanade.com

Jan 17, 2011 at 7:35 PM

Hi Sarah,

Thanks for the response.

I thought I would try to reinstall the instrumentation by uninstalling using the InstallServices.bat, and then running the Install Instrumentation shortcut from my start menu (tried using InstallServices.bat, too).

It is returning the following (running as an administrator):


==========================================================================
  InstallServices.bat
     Installs/uninstalls services for the Enterprise Library
==========================================================================

----------------------------------------
InstallServices.bat Started
----------------------------------------


-----------------------------------------------------------------
Installing Services for the Common Application Block
-----------------------------------------------------------------

Microsoft (R) .NET Framework Installation utility Version 2.0.50727.4927
Copyright (c) Microsoft Corporation.  All rights reserved.


Running a transacted installation.

Beginning the Install phase of the installation.
See the contents of the log file for the C:\windows\assembly\GAC_MSIL\Microsoft.
Practices.EnterpriseLibrary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices
.EnterpriseLibrary.Common.dll assembly's progress.
The file is located at C:\windows\assembly\GAC_MSIL\Microsoft.Practices.Enterpri
seLibrary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary
.Common.InstallLog.
Installing assembly 'C:\windows\assembly\GAC_MSIL\Microsoft.Practices.Enterprise
Library.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary.C
ommon.dll'.
Affected parameters are:
   logtoconsole =
   assemblypath = C:\windows\assembly\GAC_MSIL\Microsoft.Practices.EnterpriseLib
rary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary.Comm
on.dll
   logfile = C:\windows\assembly\GAC_MSIL\Microsoft.Practices.EnterpriseLibrary.
Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary.Common.In
stallLog
An exception occurred while trying to find the installers in the C:\windows\asse
mbly\GAC_MSIL\Microsoft.Practices.EnterpriseLibrary.Common\4.1.0.0__31bf3856ad36
4e35\Microsoft.Practices.EnterpriseLibrary.Common.dll assembly.
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the
 requested types. Retrieve the LoaderExceptions property for more information.
Aborting installation for C:\windows\assembly\GAC_MSIL\Microsoft.Practices.Enter
priseLibrary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibr
ary.Common.dll.

An exception occurred during the Install phase.
System.InvalidOperationException: Unable to get installer types in the C:\window
s\assembly\GAC_MSIL\Microsoft.Practices.EnterpriseLibrary.Common\4.1.0.0__31bf38
56ad364e35\Microsoft.Practices.EnterpriseLibrary.Common.dll assembly.
The inner exception System.Reflection.ReflectionTypeLoadException was thrown wit
h the following error message: Unable to load one or more of the requested types
. Retrieve the LoaderExceptions property for more information..

The Rollback phase of the installation is beginning.
See the contents of the log file for the C:\windows\assembly\GAC_MSIL\Microsoft.
Practices.EnterpriseLibrary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices
.EnterpriseLibrary.Common.dll assembly's progress.
The file is located at C:\windows\assembly\GAC_MSIL\Microsoft.Practices.Enterpri
seLibrary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary
.Common.InstallLog.
Rolling back assembly 'C:\windows\assembly\GAC_MSIL\Microsoft.Practices.Enterpri
seLibrary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary
.Common.dll'.
Affected parameters are:
   logtoconsole =
   assemblypath = C:\windows\assembly\GAC_MSIL\Microsoft.Practices.EnterpriseLib
rary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary.Comm
on.dll
   logfile = C:\windows\assembly\GAC_MSIL\Microsoft.Practices.EnterpriseLibrary.
Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibrary.Common.In
stallLog
An exception occurred while trying to find the installers in the C:\windows\asse
mbly\GAC_MSIL\Microsoft.Practices.EnterpriseLibrary.Common\4.1.0.0__31bf3856ad36
4e35\Microsoft.Practices.EnterpriseLibrary.Common.dll assembly.
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the
 requested types. Retrieve the LoaderExceptions property for more information.
Aborting installation for C:\windows\assembly\GAC_MSIL\Microsoft.Practices.Enter
priseLibrary.Common\4.1.0.0__31bf3856ad364e35\Microsoft.Practices.EnterpriseLibr
ary.Common.dll.
An exception occurred during the Rollback phase of the System.Configuration.Inst
all.AssemblyInstaller installer.
System.InvalidOperationException: Unable to get installer types in the C:\window
s\assembly\GAC_MSIL\Microsoft.Practices.EnterpriseLibrary.Common\4.1.0.0__31bf38
56ad364e35\Microsoft.Practices.EnterpriseLibrary.Common.dll assembly.
The inner exception System.Reflection.ReflectionTypeLoadException was thrown wit
h the following error message: Unable to load one or more of the requested types
. Retrieve the LoaderExceptions property for more information..
An exception occurred during the Rollback phase of the installation. This except
ion will be ignored and the rollback will continue. However, the machine might n
ot fully revert to its initial state after the rollback is complete.

The Rollback phase completed successfully.

The transacted install has completed.
The installation failed, and the rollback has been performed.
An error occured in InstallServices.bat - -1
You may need to run this script with administrator privileges
Press any key to continue . . .

 

Any ideas?

Thanks.

Jan 17, 2011 at 10:06 PM

We installed .NET reflector, and with performance counters enabled, the "requested Performance Counter is not a custom counter, it has to be initialized as ReadOnly." error has an this stack trace:

   at System.Diagnostics.PerformanceCounter.Initialize()
   at System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly)
   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.EnterpriseLibraryPerformanceCounterFactory.CreateCounter(String categoryName, String counterName, String[] instanceNames)
   at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationListener.CreatePerformanceCounters(String[] instanceNames)
   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentationListener.Initialize(Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter, String[] instanceNames)
   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentationListener..ctor(String[] instanceNames, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter)
   at Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.InstrumentationListener..ctor(String instanceName, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter)
   at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationListener..ctor(String instanceName, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, IPerformanceCounterNameFormatter nameFormatter)
   at Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationListener..ctor(String instanceName, Boolean performanceCountersEnabled, Boolean eventLoggingEnabled, Boolean wmiEnabled, String applicationInstanceName)

Jan 18, 2011 at 5:38 AM
Edited Jan 18, 2011 at 5:39 AM

I'm suspecting your issue is somehow related in this thread http://entlib.codeplex.com/Thread/View.aspx?ThreadId=45564. Hope the solution provided in that thread may help.

Gino Terrado
Global Technologies and Solutions
Avanade, Inc.
entlib.support@avanade.com

Jan 20, 2011 at 8:56 PM
Edited Jan 20, 2011 at 9:00 PM

Hi all,

I was able to resolve this issue by modifying the ActionInstrumentationListener constructor's parameters.

Originally, in 3.1, it was acceptable to have this constructor:

public ActionInstrumentationListener(string instanceName,
                                             bool performanceCountersEnabled,
                                             bool eventLoggingEnabled,
                                             bool wmiEnabled)
            : this(instanceName, performanceCountersEnabled, eventLoggingEnabled, wmiEnabled, new NoPrefixNameFormatter()) {

However, after reflecting several entlib and mscorlib classes, I was able to see that a fifth parameter (of type System.String) was being sent through, which did not match the expected parameter (of type IPerformanceCounterNameFormatter).  I believe this fifth constructor is used for the applicationInstanceName, which is set through the instrumentation configuration files.  No documentation that I encountered showed that this parameter was necessary to be sent into the constructor as a string, that I could find anyway.

For whatever reason, in 4.1, the InstrumentationListener constructor should include a fifth parameter in the constructor (of type System.String) as shown in the following:

public ActionInstrumentationListener(string instanceName,
                                              bool performanceCountersEnabled,
                                              bool eventLoggingEnabled,
                                              bool wmiEnabled,
                                              string applicationInstanceName)
            : this(instanceName, performanceCountersEnabled, eventLoggingEnabled, wmiEnabled, new NoPrefixNameFormatter()) {

All Instrumentation went back to working normally after providing this additional parameter in the constructor.

An example of an InstrumentationListener that was implemented by EnterpriseLibrary like this can also be found here (although, this was not a direct match for what was needed in my application):

Microsoft.Practices.EnterpriseLibrary.Data.Instrumentation.DataInstrumentationListener

Thanks to the EntLibSupport team for your help in resolving this issue :).

Jason