diff --git a/root.props b/root.props index 0307b880..2c0a5b7d 100644 --- a/root.props +++ b/root.props @@ -8,7 +8,7 @@ True 8.0 en-US - CS0618;CS1591;CS1701;CS8618;NU5048;NU5105;NU5125 + CS0618;CS1591;CS1701;CS8618;CS8632;NU5048;NU5105;NU5125 annotations icon.png LICENSE.txt diff --git a/src/GraphQL.Client.Http/GraphQL.Client.Http.csproj b/src/GraphQL.Client.Http/GraphQL.Client.Http.csproj index 5d72a44c..fcac32b3 100644 --- a/src/GraphQL.Client.Http/GraphQL.Client.Http.csproj +++ b/src/GraphQL.Client.Http/GraphQL.Client.Http.csproj @@ -3,19 +3,32 @@ - netstandard2.0 + netstandard2.0;netcoreapp3.1;net461 + + NETSTANDARD + + + + NETFRAMEWORK + + + - - - + + + + + + + diff --git a/src/GraphQL.Client.Http/GraphQLHttpClientOptions.cs b/src/GraphQL.Client.Http/GraphQLHttpClientOptions.cs index 146ff3f4..d1c139f4 100644 --- a/src/GraphQL.Client.Http/GraphQLHttpClientOptions.cs +++ b/src/GraphQL.Client.Http/GraphQLHttpClientOptions.cs @@ -52,5 +52,6 @@ public class GraphQLHttpClientOptions { /// Request preprocessing function. Can be used i.e. to inject authorization info into a GraphQL request payload. /// public Func> PreprocessRequest { get; set; } = (request, client) => Task.FromResult(request); + } } diff --git a/src/GraphQL.Client.Http/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client.Http/Websocket/GraphQLHttpWebSocket.cs index 7098a8e5..1546092b 100644 --- a/src/GraphQL.Client.Http/Websocket/GraphQLHttpWebSocket.cs +++ b/src/GraphQL.Client.Http/Websocket/GraphQLHttpWebSocket.cs @@ -24,7 +24,11 @@ internal class GraphQLHttpWebSocket : IDisposable { public WebSocketState WebSocketState => clientWebSocket?.State ?? WebSocketState.None; +#if NETFRAMEWORK private WebSocket clientWebSocket = null; +#else + private ClientWebSocket clientWebSocket = null; +#endif private int _connectionAttempt = 0; public GraphQLHttpWebSocket(Uri webSocketUri, GraphQLHttpClientOptions options) { @@ -71,7 +75,7 @@ await this.clientWebSocket.SendAsync( private readonly object _initializeLock = new object(); - #region Private Methods +#region Private Methods private Task _backOff() { _connectionAttempt++; @@ -103,6 +107,7 @@ public Task InitializeWebSocket() { //_responseStreamConnection?.Dispose(); clientWebSocket?.Dispose(); +#if NETFRAMEWORK // fix websocket not supported on win 7 using // https://github.com/PingmanTools/System.Net.WebSockets.Client.Managed clientWebSocket = SystemClientWebSocket.CreateClientWebSocket(); @@ -120,7 +125,12 @@ public Task InitializeWebSocket() { default: throw new NotSupportedException($"unknown websocket type {clientWebSocket.GetType().Name}"); } - +#else + clientWebSocket = new ClientWebSocket(); + clientWebSocket.Options.AddSubProtocol("graphql-ws"); + clientWebSocket.Options.ClientCertificates = ((HttpClientHandler)_options.HttpMessageHandler).ClientCertificates; + clientWebSocket.Options.UseDefaultCredentials = ((HttpClientHandler)_options.HttpMessageHandler).UseDefaultCredentials; +#endif return InitializeWebSocketTask = _connectAsync(_cancellationTokenSource.Token); } } @@ -247,9 +257,9 @@ private async Task _closeAsync(CancellationToken cancellationToken = default) { await this.clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", cancellationToken).ConfigureAwait(false); } - #endregion +#endregion - #region IDisposable +#region IDisposable private Task _disposed; private object _disposedLocker = new object(); @@ -269,6 +279,6 @@ private async Task DisposeAsync() { _cancellationTokenSource.Dispose(); Debug.WriteLine($"websocket {clientWebSocket.GetHashCode()} disposed"); } - #endregion +#endregion } } diff --git a/src/GraphQL.Client/GraphQL.Client.csproj b/src/GraphQL.Client/GraphQL.Client.csproj index bc004365..78633fd1 100644 --- a/src/GraphQL.Client/GraphQL.Client.csproj +++ b/src/GraphQL.Client/GraphQL.Client.csproj @@ -12,8 +12,6 @@ - -