From e2d6ffaf9cbf00db01669745ae688c315db33782 Mon Sep 17 00:00:00 2001 From: Weihan Li Date: Sat, 26 Jul 2025 16:12:17 +0800 Subject: [PATCH 1/6] skip create httpClient only for websocket SkipNegotiation and httpVersion is not http2 --- .../src/HttpConnection.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs index 19bca526098e..eae54c426900 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs @@ -148,10 +148,7 @@ public HttpConnection(HttpConnectionOptions httpConnectionOptions, ILoggerFactor _url = _httpConnectionOptions.Url; - if (!httpConnectionOptions.SkipNegotiation || httpConnectionOptions.Transports != HttpTransportType.WebSockets) - { - _httpClient = CreateHttpClient(); - } + _httpClient = CreateHttpClient(); if (httpConnectionOptions.Transports == HttpTransportType.ServerSentEvents && OperatingSystem.IsBrowser()) { @@ -550,8 +547,17 @@ private async Task StartTransport(Uri connectUrl, HttpTransportType transportTyp Log.TransportStarted(_logger, transportType); } - private HttpClient CreateHttpClient() + private HttpClient? CreateHttpClient() { + var clientWebSocketOptions = _httpConnectionOptions.WebSocketConfiguration(new ClientWebSocketOptions()); + if (httpConnectionOptions.SkipNegotiation + && httpConnectionOptions.Transports == HttpTransportType.WebSockets + && clientWebSocketOptions.HttpVersion < HttpVersion.Version20 + ) + { + return null; + } + var httpClientHandler = new HttpClientHandler(); HttpMessageHandler httpMessageHandler = httpClientHandler; From a03bff1049d0d5592d7b2ac9573ea23ded511217 Mon Sep 17 00:00:00 2001 From: Weihan Li Date: Sat, 26 Jul 2025 16:25:28 +0800 Subject: [PATCH 2/6] Update HttpConnection.cs --- .../csharp/Http.Connections.Client/src/HttpConnection.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs index eae54c426900..5de9ce1069c9 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs @@ -549,9 +549,10 @@ private async Task StartTransport(Uri connectUrl, HttpTransportType transportTyp private HttpClient? CreateHttpClient() { - var clientWebSocketOptions = _httpConnectionOptions.WebSocketConfiguration(new ClientWebSocketOptions()); - if (httpConnectionOptions.SkipNegotiation - && httpConnectionOptions.Transports == HttpTransportType.WebSockets + var clientWebSocketOptions = new ClientWebSocketOptions(); + _httpConnectionOptions.WebSocketConfiguration?.Invoke(clientWebSocketOptions); + if (_httpConnectionOptions.SkipNegotiation + && _httpConnectionOptions.Transports == HttpTransportType.WebSockets && clientWebSocketOptions.HttpVersion < HttpVersion.Version20 ) { From 5ef0a30fccb7ace6cf1886b42c512ac9e7d722fa Mon Sep 17 00:00:00 2001 From: Weihan Li Date: Sun, 27 Jul 2025 08:06:05 +0800 Subject: [PATCH 3/6] update CreateHttpClient condition --- .../Http.Connections.Client/src/HttpConnection.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs index 5de9ce1069c9..dba4e9b29857 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs @@ -549,14 +549,14 @@ private async Task StartTransport(Uri connectUrl, HttpTransportType transportTyp private HttpClient? CreateHttpClient() { - var clientWebSocketOptions = new ClientWebSocketOptions(); - _httpConnectionOptions.WebSocketConfiguration?.Invoke(clientWebSocketOptions); if (_httpConnectionOptions.SkipNegotiation - && _httpConnectionOptions.Transports == HttpTransportType.WebSockets - && clientWebSocketOptions.HttpVersion < HttpVersion.Version20 + && _httpConnectionOptions.Transports == HttpTransportType.WebSockets` ) { - return null; + var clientWebSocket = new System.Net.WebSockets.ClientWebSocket(); + _httpConnectionOptions.WebSocketConfiguration?.Invoke(clientWebSocket.Options); + if (clientWebSocket.Options.HttpVersion < System.Net.HttpVersion.Version20) + return null; } var httpClientHandler = new HttpClientHandler(); From 9b691786734cd5ef1a56c4897403e74587a12976 Mon Sep 17 00:00:00 2001 From: Weihan Li Date: Sun, 27 Jul 2025 08:09:27 +0800 Subject: [PATCH 4/6] fix build --- .../csharp/Http.Connections.Client/src/HttpConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs index dba4e9b29857..ab982bd40ce8 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs @@ -550,7 +550,7 @@ private async Task StartTransport(Uri connectUrl, HttpTransportType transportTyp private HttpClient? CreateHttpClient() { if (_httpConnectionOptions.SkipNegotiation - && _httpConnectionOptions.Transports == HttpTransportType.WebSockets` + && _httpConnectionOptions.Transports == HttpTransportType.WebSockets ) { var clientWebSocket = new System.Net.WebSockets.ClientWebSocket(); From 0df39e893c157a3da8e4f6821879225061da14cc Mon Sep 17 00:00:00 2001 From: Weihan Li Date: Sun, 27 Jul 2025 08:40:22 +0800 Subject: [PATCH 5/6] Update HttpConnection.cs --- .../Http.Connections.Client/src/HttpConnection.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs index ab982bd40ce8..e09d0ed67eab 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs @@ -549,16 +549,6 @@ private async Task StartTransport(Uri connectUrl, HttpTransportType transportTyp private HttpClient? CreateHttpClient() { - if (_httpConnectionOptions.SkipNegotiation - && _httpConnectionOptions.Transports == HttpTransportType.WebSockets - ) - { - var clientWebSocket = new System.Net.WebSockets.ClientWebSocket(); - _httpConnectionOptions.WebSocketConfiguration?.Invoke(clientWebSocket.Options); - if (clientWebSocket.Options.HttpVersion < System.Net.HttpVersion.Version20) - return null; - } - var httpClientHandler = new HttpClientHandler(); HttpMessageHandler httpMessageHandler = httpClientHandler; From 2ac1414904456637280d9d4fbf99ac05843b8515 Mon Sep 17 00:00:00 2001 From: Weihan Li Date: Sun, 27 Jul 2025 08:40:56 +0800 Subject: [PATCH 6/6] Update HttpConnection.cs --- .../csharp/Http.Connections.Client/src/HttpConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs index e09d0ed67eab..c49170caf285 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnection.cs @@ -547,7 +547,7 @@ private async Task StartTransport(Uri connectUrl, HttpTransportType transportTyp Log.TransportStarted(_logger, transportType); } - private HttpClient? CreateHttpClient() + private HttpClient CreateHttpClient() { var httpClientHandler = new HttpClientHandler(); HttpMessageHandler httpMessageHandler = httpClientHandler;