internal static void RegisterDiagnosticsComponents() { ExchangeDiagnosticsSection config = ExchangeDiagnosticsSection.GetConfig(); ExTraceGlobals.CommonTracer.TraceInformation <int>(0, 0L, "ExchangeDiagnosticsHelper::RegisterDiagnosticsComponents called. No of Component:{0}", config.DiagnosticComponents.Count); foreach (object obj in config.DiagnosticComponents) { DiagnosticsComponent diagnosticsComponent = (DiagnosticsComponent)obj; ExTraceGlobals.CommonTracer.TraceDebug(0L, "ExchangeDiagnosticsHelper::RegisterDiagnosticsComponents ComponentName:{0}, Type:{1}, MethodName:{2}, Argument:{3}", new object[] { diagnosticsComponent.Name, diagnosticsComponent.Implementation, diagnosticsComponent.MethodName, diagnosticsComponent.Argument }); IDiagnosable instance = ExchangeDiagnosticsHelper.GetInstance(diagnosticsComponent); if (diagnosticsComponent.Data != null) { IDiagnosableExtraData diagnosableExtraData = instance as IDiagnosableExtraData; if (diagnosableExtraData != null) { diagnosableExtraData.SetData(diagnosticsComponent.Data); } } ExchangeDiagnosticsHelper.RegisterDiagnosticsComponents(instance); } }
public static void UnregisterComponent(IDiagnosable diagnosable) { if (diagnosable == null) { throw new ArgumentNullException("diagnosable"); } string diagnosticComponentName = diagnosable.GetDiagnosticComponentName(); if (string.IsNullOrEmpty(diagnosticComponentName)) { throw new ArgumentNullException("diagnosable.GetDiagnosticComponentName()"); } lock (ProcessAccessManager.RpcServerLockObject) { ProcessAccessManager.diagnosableComponents.Remove(diagnosticComponentName); if (ProcessAccessManager.diagnosableComponents.Count == 0 && ProcessAccessManager.RpcServer != null) { RpcServerBase.StopServer(ProcessAccessRpcServer.RpcIntfHandle); ProcessAccessManager.RpcServer = null; } } IDiagnosableExtraData diagnosableExtraData = diagnosable as IDiagnosableExtraData; if (diagnosableExtraData != null) { diagnosableExtraData.OnStop(); } }