Skip to content

Commit 3613f08

Browse files
authored
[dotnet] Fix race condition for .net framework when internal tracing enabled (#16091)
This exception might be happened in .NET Framework only. On .NET Core it works smoothly. System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at System.Net.Http.Headers.HttpHeaders.AddHeaderToStore(String name, HeaderStoreItemInfo info) at System.Net.Http.Headers.HttpHeaders.CreateAndAddHeaderToStore(String name) at System.Net.Http.Headers.HttpHeaders.GetOrCreateHeaderInfo(String name, Boolean parseRawValues) at System.Net.Http.Headers.HttpHeaders.SetParsedValue(String name, Object value) at System.Net.Http.Headers.HttpContentHeaders.get_ContentLength() at System.Net.Http.HttpClientHandler.PrepareAndStartContentUpload(RequestState state)
1 parent a4665fa commit 3613f08

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

dotnet/src/webdriver/Remote/HttpCommandExecutor.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,6 @@ public DiagnosticsHttpHandler(HttpMessageHandler messageHandler, ILogger logger)
440440
/// <returns>The http response message content.</returns>
441441
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
442442
{
443-
var responseTask = base.SendAsync(request, cancellationToken);
444-
445443
StringBuilder requestLogMessageBuilder = new();
446444
requestLogMessageBuilder.AppendFormat(">> {0} RequestUri: {1}, Content: {2}, Headers: {3}",
447445
request.Method,
@@ -451,20 +449,30 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
451449

452450
if (request.Content != null)
453451
{
452+
#if NET8_0_OR_GREATER
453+
var requestContent = await request.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
454+
#else
454455
var requestContent = await request.Content.ReadAsStringAsync().ConfigureAwait(false);
456+
#endif
455457
requestLogMessageBuilder.AppendFormat("{0}{1}", Environment.NewLine, requestContent);
456458
}
457459

458460
_logger.Trace(requestLogMessageBuilder.ToString());
459461

460-
var response = await responseTask.ConfigureAwait(false);
462+
var response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
461463

462464
StringBuilder responseLogMessageBuilder = new();
465+
463466
responseLogMessageBuilder.AppendFormat("<< StatusCode: {0}, ReasonPhrase: {1}, Content: {2}, Headers: {3}", (int)response.StatusCode, response.ReasonPhrase, response.Content, response.Headers?.Count());
464467

465468
if (!response.IsSuccessStatusCode && response.Content != null)
466469
{
470+
#if NET8_0_OR_GREATER
471+
var responseContent = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
472+
#else
467473
var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
474+
#endif
475+
468476
responseLogMessageBuilder.AppendFormat("{0}{1}", Environment.NewLine, responseContent);
469477
}
470478

0 commit comments

Comments
 (0)