コード例 #1
0
        public FilteredEndpointInfoSource(
            ServerEndpointInfoSource serverEndpointInfoSource,
            IOptions <DiagnosticPortOptions> portOptions,
            ILogger <ClientEndpointInfoSource> clientSourceLogger)
        {
            _portOptions = portOptions.Value;

            DiagnosticPortConnectionMode connectionMode = _portOptions.GetConnectionMode();

            switch (connectionMode)
            {
            case DiagnosticPortConnectionMode.Connect:
                _source = new ClientEndpointInfoSource(clientSourceLogger);
                break;

            case DiagnosticPortConnectionMode.Listen:
                _source = serverEndpointInfoSource;
                break;

            default:
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Strings.ErrorMessage_UnhandledConnectionMode, connectionMode));
            }

            // Filter out the current process based on the connection mode.
            if (RuntimeInfo.IsDiagnosticsEnabled)
            {
                int pid = Process.GetCurrentProcess().Id;

                // Regardless of connection mode, can use the runtime instance cookie to filter self out.
                try
                {
                    var  client = new DiagnosticsClient(pid);
                    Guid runtimeInstanceCookie = client.GetProcessInfo().RuntimeInstanceCookie;
                    if (Guid.Empty != runtimeInstanceCookie)
                    {
                        _runtimeInstanceCookieToFilterOut = runtimeInstanceCookie;
                    }
                }
                catch (Exception)
                {
                }

                // If connecting to runtime instances, filter self out. In listening mode, it's likely
                // that multiple processes have the same PID in multi-container scenarios.
                if (DiagnosticPortConnectionMode.Connect == connectionMode)
                {
                    _processIdToFilterOut = pid;
                }
            }
        }
コード例 #2
0
        public FilteredEndpointInfoSource(IOptions <DiagnosticPortOptions> portOptions)
        {
            _portOptions = portOptions.Value;
            switch (_portOptions.ConnectionMode)
            {
            case DiagnosticPortConnectionMode.Connect:
                _source = new ClientEndpointInfoSource();
                break;

            case DiagnosticPortConnectionMode.Listen:
                _source = new ServerEndpointInfoSource(_portOptions.EndpointName);
                break;

            default:
                throw new InvalidOperationException($"Unhandled connection mode: {_portOptions.ConnectionMode}");
            }

            // Filter out the current process based on the connection mode.
            if (RuntimeInfo.IsDiagnosticsEnabled)
            {
                int pid = Process.GetCurrentProcess().Id;

                // Regardless of connection mode, can use the runtime instance cookie to filter self out.
                try
                {
                    var  client = new DiagnosticsClient(pid);
                    Guid runtimeInstanceCookie = client.GetProcessInfo().RuntimeInstanceCookie;
                    if (Guid.Empty != runtimeInstanceCookie)
                    {
                        _runtimeInstanceCookieToFilterOut = runtimeInstanceCookie;
                    }
                }
                catch (Exception)
                {
                }

                // If connecting to runtime instances, filter self out. In listening mode, it's likely
                // that multiple processes have the same PID in multi-container scenarios.
                if (DiagnosticPortConnectionMode.Connect == portOptions.Value.ConnectionMode)
                {
                    _processIdToFilterOut = pid;
                }
            }
        }