From a375c05cf3f65b39e27ce5d068c7262ce81c297c Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Tue, 3 Sep 2019 12:58:42 -0700 Subject: [PATCH] DiagnosticSource Stop event was not reported in W3C mode by HttpHandlerDiagnosticListener on netfx --- .../System/Diagnostics/HttpHandlerDiagnosticListener.cs | 3 ++- .../tests/HttpHandlerDiagnosticListenerTests.cs | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs b/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs index d2c7700fb4de..e50d79fef6c9 100644 --- a/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs +++ b/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/HttpHandlerDiagnosticListener.cs @@ -658,7 +658,8 @@ private void RaiseResponseEvent(HttpWebRequest request, HttpWebResponse response // Response event could be received several times for the same request in case it was redirected // IsLastResponse checks if response is the last one (no more redirects will happen) // based on response StatusCode and number or redirects done so far - if (request.Headers.Get(RequestIdHeaderName) != null && IsLastResponse(request, response.StatusCode)) + bool wasRequestInstrumented = request.Headers.Get(TraceParentHeaderName) != null || request.Headers.Get(RequestIdHeaderName) != null; + if (wasRequestInstrumented && IsLastResponse(request, response.StatusCode)) { // only send Stop if request was instrumented this.Write(RequestStopName, new { Request = request, Response = response }); diff --git a/src/System.Diagnostics.DiagnosticSource/tests/HttpHandlerDiagnosticListenerTests.cs b/src/System.Diagnostics.DiagnosticSource/tests/HttpHandlerDiagnosticListenerTests.cs index 9ba9e49195ca..89d8e9558ef1 100644 --- a/src/System.Diagnostics.DiagnosticSource/tests/HttpHandlerDiagnosticListenerTests.cs +++ b/src/System.Diagnostics.DiagnosticSource/tests/HttpHandlerDiagnosticListenerTests.cs @@ -173,6 +173,15 @@ public async Task TestW3CHeaders() Assert.Matches("^[0-9a-f][0-9a-f]-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f][0-9a-f]$", traceparent); Assert.Null(startRequest.Headers["tracestate"]); Assert.Null(startRequest.Headers["Request-Id"]); + + KeyValuePair stopEvent; + Assert.True(eventRecords.Records.TryDequeue(out stopEvent)); + Assert.Equal("System.Net.Http.Desktop.HttpRequestOut.Stop", stopEvent.Key); + HttpWebRequest stopRequest = ReadPublicProperty(stopEvent.Value, "Request"); + Assert.NotNull(stopRequest); + + HttpWebResponse stopResponse = ReadPublicProperty(stopEvent.Value, "Response"); + Assert.NotNull(stopResponse); } } finally