diff --git a/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.csproj b/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.csproj index 72e71d1c3195..11eb4ad78e82 100644 --- a/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.csproj +++ b/src/Hosting/Hosting/ref/Microsoft.AspNetCore.Hosting.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj b/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj index c78cef809d9b..c0e3e772840a 100644 --- a/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj +++ b/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core hosting infrastructure and startup logic for web applications. @@ -26,7 +26,7 @@ - + diff --git a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs index 46b0f3a67166..1c315f1387d9 100644 --- a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs +++ b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs @@ -86,7 +86,7 @@ private Func> GetHttpConnectionFactory(st public async Task CheckFixedMessage(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -125,7 +125,7 @@ bool ExpectedError(WriteContext writeContext) } var protocol = HubProtocols["json"]; - using (var server = await StartServer(ExpectedError)) + await using (var server = await StartServer(ExpectedError)) { var connectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -155,7 +155,7 @@ bool ExpectedError(WriteContext writeContext) public async Task ClientCanConnectToServerWithLowerMinimumProtocol() { var protocol = HubProtocols["json"]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -185,7 +185,7 @@ public async Task ClientCanConnectToServerWithLowerMinimumProtocol() public async Task CanSendAndReceiveMessage(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { const string originalMessage = "SignalR"; var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); @@ -214,7 +214,7 @@ public async Task CanSendAndReceiveMessage(string protocolName, HttpTransportTyp public async Task CanSendNull(string protocolName) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, "/default", HttpTransportType.LongPolling, protocol, LoggerFactory); try @@ -243,7 +243,7 @@ public async Task CanSendNull(string protocolName) public async Task CanStopAndStartConnection(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { const string originalMessage = "SignalR"; var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); @@ -275,7 +275,7 @@ public async Task CanStopAndStartConnection(string protocolName, HttpTransportTy public async Task CanAccessConnectionIdFromHubConnection(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -310,7 +310,7 @@ public async Task CanAccessConnectionIdFromHubConnection(string protocolName, Ht public async Task CanStartConnectionFromClosedEvent(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); const string originalMessage = "SignalR"; @@ -372,7 +372,7 @@ public async Task CanStartConnectionFromClosedEvent(string protocolName, HttpTra public async Task MethodsAreCaseInsensitive(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { const string originalMessage = "SignalR"; var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); @@ -402,7 +402,7 @@ public async Task MethodsAreCaseInsensitive(string protocolName, HttpTransportTy public async Task CanInvokeFromOnHandler(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { const string originalMessage = "SignalR"; @@ -442,7 +442,7 @@ public async Task CanInvokeFromOnHandler(string protocolName, HttpTransportType public async Task StreamAsyncCoreTest(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -477,7 +477,7 @@ public async Task StreamAsyncCoreTest(string protocolName, HttpTransportType tra public async Task CanStreamToHubWithIAsyncEnumerableMethodArg(string protocolName) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, "/default", HttpTransportType.WebSockets, protocol, LoggerFactory); try @@ -523,7 +523,7 @@ async IAsyncEnumerable ClientStreamData(int value) public async Task StreamAsyncTest(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -558,7 +558,7 @@ public async Task StreamAsyncTest(string protocolName, HttpTransportType transpo public async Task StreamAsyncDoesNotStartIfTokenAlreadyCanceled(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -595,7 +595,7 @@ public async Task StreamAsyncDoesNotStartIfTokenAlreadyCanceled(string protocolN public async Task StreamAsyncCanBeCanceled(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -643,7 +643,7 @@ bool ExpectedErrors(WriteContext writeContext) } var protocol = HubProtocols[protocolName]; - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -679,7 +679,7 @@ bool ExpectedErrors(WriteContext writeContext) public async Task CanInvokeClientMethodFromServer(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { const string originalMessage = "SignalR"; @@ -713,7 +713,7 @@ public async Task CanInvokeClientMethodFromServer(string protocolName, HttpTrans public async Task InvokeNonExistantClientMethodFromServer(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); var closeTcs = new TaskCompletionSource(); @@ -755,7 +755,7 @@ public async Task InvokeNonExistantClientMethodFromServer(string protocolName, H public async Task CanStreamClientMethodFromServer(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -785,7 +785,7 @@ public async Task CanStreamClientMethodFromServer(string protocolName, HttpTrans public async Task CanStreamToAndFromClientInSameInvocation(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -822,7 +822,7 @@ public async Task CanStreamToAndFromClientInSameInvocation(string protocolName, public async Task CanStreamToServerWithIAsyncEnumerable(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -869,7 +869,7 @@ async IAsyncEnumerable clientStreamData() public async Task CanCancelIAsyncEnumerableClientToServerUpload(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -922,7 +922,7 @@ async IAsyncEnumerable clientStreamData() public async Task StreamAsyncCanBeCanceledThroughGetAsyncEnumerator(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -963,7 +963,7 @@ await Assert.ThrowsAsync(async () => public async Task CanCloseStreamMethodEarly(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -1004,7 +1004,7 @@ public async Task CanCloseStreamMethodEarly(string protocolName, HttpTransportTy public async Task StreamDoesNotStartIfTokenAlreadyCanceled(string protocolName, HttpTransportType transportType, string path) { var protocol = HubProtocols[protocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -1039,7 +1039,7 @@ bool ExpectedErrors(WriteContext writeContext) } var protocol = HubProtocols[protocolName]; - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try @@ -1067,7 +1067,7 @@ bool ExpectedErrors(WriteContext writeContext) public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolved(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1094,7 +1094,7 @@ public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolved(string hub public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolvedAndArgumentsPassedIn(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1121,7 +1121,7 @@ public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolvedAndArgument public async Task ServerThrowsHubExceptionOnHubMethodArgumentCountMismatch(string hubProtocolName) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, "/default", HttpTransportType.LongPolling, hubProtocol, LoggerFactory); try @@ -1148,7 +1148,7 @@ public async Task ServerThrowsHubExceptionOnHubMethodArgumentCountMismatch(strin public async Task ServerThrowsHubExceptionOnHubMethodArgumentTypeMismatch(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1175,7 +1175,7 @@ public async Task ServerThrowsHubExceptionOnHubMethodArgumentTypeMismatch(string public async Task ServerThrowsHubExceptionIfStreamingHubMethodCannotBeResolved(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1203,7 +1203,7 @@ public async Task ServerThrowsHubExceptionIfStreamingHubMethodCannotBeResolved(s public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentCountMismatch(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1231,7 +1231,7 @@ public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentCountMisma public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentTypeMismatch(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1259,7 +1259,7 @@ public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentTypeMismat public async Task ServerThrowsHubExceptionIfNonStreamMethodInvokedWithStreamAsync(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1286,7 +1286,7 @@ public async Task ServerThrowsHubExceptionIfNonStreamMethodInvokedWithStreamAsyn public async Task ServerThrowsHubExceptionIfStreamMethodInvokedWithInvoke(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1313,7 +1313,7 @@ public async Task ServerThrowsHubExceptionIfStreamMethodInvokedWithInvoke(string public async Task ServerThrowsHubExceptionIfBuildingAsyncEnumeratorIsNotPossible(string hubProtocolName, HttpTransportType transportType, string hubPath) { var hubProtocol = HubProtocols[hubProtocolName]; - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try @@ -1349,7 +1349,7 @@ public async Task ServerLogsErrorIfClientInvokeCannotBeSerialized(string protoco }; var protocol = HubProtocols[protocolName]; - using (var server = await StartServer(write => write.EventId.Name == "FailedWritingMessage")) + await using (var server = await StartServer(write => write.EventId.Name == "FailedWritingMessage")) { var connection = CreateHubConnection(server.Url, "/default", HttpTransportType.WebSockets, protocol, LoggerFactory); var closedTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); @@ -1396,7 +1396,7 @@ public async Task ServerLogsErrorIfReturnValueCannotBeSerialized(string protocol }; var protocol = HubProtocols[protocolName]; - using (var server = await StartServer(write => write.EventId.Name == "FailedWritingMessage")) + await using (var server = await StartServer(write => write.EventId.Name == "FailedWritingMessage")) { var connection = CreateHubConnection(server.Url, "/default", HttpTransportType.LongPolling, protocol, LoggerFactory); var closedTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); @@ -1436,7 +1436,7 @@ public async Task RandomGenericIsNotTreatedAsStream() var hubProtocol = HubProtocols.First().Value; var transportType = TransportTypes().First().Cast().First(); - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); await connection.StartAsync().OrTimeout(); @@ -1453,7 +1453,7 @@ public async Task RandomGenericIsNotTreatedAsStream() [MemberData(nameof(TransportTypes))] public async Task ClientCanUseJwtBearerTokenForAuthentication(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { async Task AccessTokenProvider() { @@ -1496,7 +1496,7 @@ bool ExpectedErrors(WriteContext writeContext) return writeContext.Exception is HttpRequestException; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1518,7 +1518,7 @@ bool ExpectedErrors(WriteContext writeContext) [MemberData(nameof(TransportTypes))] public async Task ClientCanUseJwtBearerTokenForAuthenticationWhenRedirected(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1546,7 +1546,7 @@ public async Task ClientCanUseJwtBearerTokenForAuthenticationWhenRedirected(Http [MemberData(nameof(TransportTypes))] public async Task ClientCanSendHeaders(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1577,7 +1577,7 @@ public async Task ClientCanSendHeaders(HttpTransportType transportType) [Fact] public async Task UserAgentIsSet() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1619,7 +1619,7 @@ public async Task UserAgentIsSet() [Fact] public async Task UserAgentCanBeCleared() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1654,7 +1654,7 @@ public async Task UserAgentCanBeCleared() [Fact] public async Task UserAgentCanBeSet() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1690,7 +1690,7 @@ public async Task UserAgentCanBeSet() [WebSocketsSupportedCondition] public async Task WebSocketOptionsAreApplied() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { // System.Net has a HttpTransportType type which means we need to fully-qualify this rather than 'use' the namespace var cookieJar = new System.Net.CookieContainer(); @@ -1724,7 +1724,7 @@ public async Task WebSocketOptionsAreApplied() [Fact] public async Task CheckHttpConnectionFeatures() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1760,7 +1760,7 @@ public async Task CheckHttpConnectionFeatures() [Fact] public async Task UserIdProviderCanAccessHttpContext() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1791,7 +1791,7 @@ public async Task UserIdProviderCanAccessHttpContext() [Fact] public async Task NegotiationSkipsServerSentEventsWhenUsingBinaryProtocol() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var hubConnectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1821,7 +1821,7 @@ public async Task NegotiationSkipsServerSentEventsWhenUsingBinaryProtocol() [Fact] public async Task StopCausesPollToReturnImmediately() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { PollTrackingMessageHandler pollTracker = null; var hubConnection = new HubConnectionBuilder() @@ -1869,7 +1869,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ReconnectingWithError"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var connection = CreateHubConnection( server.Url, @@ -1931,7 +1931,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ReconnectingWithError"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var connection = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -1991,7 +1991,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ReconnectingWithError"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var connectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) diff --git a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs index b7f3206313be..0b1d2de409b8 100644 --- a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs +++ b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs @@ -35,7 +35,7 @@ public class HubProtocolVersionTests : FunctionalTestBase [MemberData(nameof(TransportTypes))] public async Task ClientUsingOldCallWithOriginalProtocol(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -67,7 +67,7 @@ public async Task ClientUsingOldCallWithOriginalProtocol(HttpTransportType trans [MemberData(nameof(TransportTypes))] public async Task ClientUsingOldCallWithNewProtocol(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var connectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) @@ -100,7 +100,7 @@ public async Task ClientUsingOldCallWithNewProtocol(HttpTransportType transportT [MemberData(nameof(TransportTypes))] public async Task ClientUsingNewCallWithNewProtocol(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var httpConnectionFactory = new HttpConnectionFactory( Options.Create(new HttpConnectionOptions @@ -166,7 +166,7 @@ bool ExpectedErrors(WriteContext writeContext) return writeContext.LoggerName == typeof(HubConnection).FullName; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var connectionBuilder = new HubConnectionBuilder() .WithLoggerFactory(LoggerFactory) diff --git a/src/SignalR/clients/ts/FunctionalTests/Program.cs b/src/SignalR/clients/ts/FunctionalTests/Program.cs index 2f67e3d5cdec..bc1cc0a323a7 100644 --- a/src/SignalR/clients/ts/FunctionalTests/Program.cs +++ b/src/SignalR/clients/ts/FunctionalTests/Program.cs @@ -5,7 +5,9 @@ using System.IO; using System.Runtime.InteropServices; using System.Security.Cryptography.X509Certificates; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Win32; @@ -13,7 +15,7 @@ namespace FunctionalTests { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { string url = null; for (var i = 0; i < args.Length; i++) @@ -27,65 +29,69 @@ public static void Main(string[] args) } } - var hostBuilder = new WebHostBuilder() - .ConfigureLogging(factory => + var hostBuilder = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - factory.AddConsole(options => + webHostBuilder + .ConfigureLogging(factory => { - options.IncludeScopes = true; - options.TimestampFormat = "[HH:mm:ss] "; - options.UseUtcTimestamp = true; - }); - factory.AddDebug(); - factory.SetMinimumLevel(LogLevel.Debug); - }) - .UseKestrel((builderContext, options) => - { - options.ConfigureHttpsDefaults(httpsOptions => + factory.AddConsole(options => + { + options.IncludeScopes = true; + options.TimestampFormat = "[HH:mm:ss] "; + options.UseUtcTimestamp = true; + }); + factory.AddDebug(); + factory.SetMinimumLevel(LogLevel.Debug); + }) + .UseKestrel((builderContext, options) => { - bool useRSA = false; - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + options.ConfigureHttpsDefaults(httpsOptions => { - // Detect Win10+ - var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); - var major = key.GetValue("CurrentMajorVersionNumber") as int?; - var minor = key.GetValue("CurrentMinorVersionNumber") as int?; + bool useRSA = false; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + // Detect Win10+ + var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); + var major = key.GetValue("CurrentMajorVersionNumber") as int?; + var minor = key.GetValue("CurrentMinorVersionNumber") as int?; - if (major.HasValue && minor.HasValue) + if (major.HasValue && minor.HasValue) + { + useRSA = true; + } + } + else { useRSA = true; } - } - else - { - useRSA = true; - } - if (useRSA) - { - // RSA cert, won't work on Windows 8.1 & Windows 2012 R2 using HTTP2, and ECC won't work in some Node environments - var certPath = Path.Combine(Directory.GetCurrentDirectory(), "testCert.pfx"); - httpsOptions.ServerCertificate = new X509Certificate2(certPath, "testPassword"); - } - else - { - // ECC cert, works on Windows 8.1 & Windows 2012 R2 using HTTP2 - var certPath = Path.Combine(Directory.GetCurrentDirectory(), "testCertECC.pfx"); - httpsOptions.ServerCertificate = new X509Certificate2(certPath, "testPassword"); - } - }); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup(); + if (useRSA) + { + // RSA cert, won't work on Windows 8.1 & Windows 2012 R2 using HTTP2, and ECC won't work in some Node environments + var certPath = Path.Combine(Directory.GetCurrentDirectory(), "testCert.pfx"); + httpsOptions.ServerCertificate = new X509Certificate2(certPath, "testPassword"); + } + else + { + // ECC cert, works on Windows 8.1 & Windows 2012 R2 using HTTP2 + var certPath = Path.Combine(Directory.GetCurrentDirectory(), "testCertECC.pfx"); + httpsOptions.ServerCertificate = new X509Certificate2(certPath, "testPassword"); + } + }); + }) + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); - if (!string.IsNullOrEmpty(url)) - { - Console.WriteLine($"Forcing URL to: {url}"); - hostBuilder.UseUrls(url); - } + if (!string.IsNullOrEmpty(url)) + { + Console.WriteLine($"Forcing URL to: {url}"); + webHostBuilder.UseUrls(url); + } + }); - hostBuilder.Build().Run(); + return hostBuilder.Build().RunAsync(); } } } diff --git a/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs b/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs index d603c0d0830c..7b734ac2fa5c 100644 --- a/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs +++ b/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs @@ -13,11 +13,13 @@ using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Cors.Infrastructure; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.SignalR.Tests; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Xunit; using Xunit.Abstractions; @@ -305,7 +307,7 @@ void ConfigureRoutes(IEndpointRouteBuilder endpoints) [WebSocketsSupportedCondition] public async Task MapConnectionHandlerWithWebSocketSubProtocolSetsProtocol() { - var host = BuildWebHost("/socket", + using var host = BuildWebHost("/socket", options => options.WebSockets.SubProtocolSelector = subprotocols => { Assert.Equal(new[] { "protocol1", "protocol2" }, subprotocols.ToArray()); @@ -314,7 +316,7 @@ public async Task MapConnectionHandlerWithWebSocketSubProtocolSetsProtocol() await host.StartAsync(); - var feature = host.ServerFeatures.Get(); + var feature = host.Services.GetService().Features.Get(); var address = feature.Addresses.First().Replace("http", "ws") + "/socket"; var client = new ClientWebSocket(); @@ -377,44 +379,52 @@ public override Task OnConnectedAsync(ConnectionContext connection) } } - private IWebHost BuildWebHost(Action configure) + private IHost BuildWebHost(Action configure) { - return new WebHostBuilder() - .UseKestrel() - .ConfigureServices(services => + return new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - services.AddConnections(); - }) - .Configure(app => - { - app.UseRouting(); - app.UseEndpoints(endpoints => configure(endpoints)); + webHostBuilder + .UseKestrel() + .ConfigureServices(services => + { + services.AddConnections(); + }) + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(endpoints => configure(endpoints)); + }) + .UseUrls("http://127.0.0.1:0"); }) - .UseUrls("http://127.0.0.1:0") .Build(); } - private IWebHost BuildWebHost(string path, Action configureOptions) where TConnectionHandler : ConnectionHandler + private IHost BuildWebHost(string path, Action configureOptions) where TConnectionHandler : ConnectionHandler { - return new WebHostBuilder() - .UseUrls("http://127.0.0.1:0") - .UseKestrel() - .ConfigureServices(services => - { - services.AddConnections(); - }) - .Configure(app => + return new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.UseRouting(); - app.UseEndpoints(routes => + webHostBuilder + .UseUrls("http://127.0.0.1:0") + .UseKestrel() + .ConfigureServices(services => + { + services.AddConnections(); + }) + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(routes => + { + routes.MapConnectionHandler(path, configureOptions); + }); + }) + .ConfigureLogging(factory => { - routes.MapConnectionHandler(path, configureOptions); + factory.AddXunit(_output, LogLevel.Trace); }); }) - .ConfigureLogging(factory => - { - factory.AddXunit(_output, LogLevel.Trace); - }) .Build(); } } diff --git a/src/SignalR/common/testassets/Tests.Utils/InProcessTestServer.cs b/src/SignalR/common/testassets/Tests.Utils/InProcessTestServer.cs index 631220c7def5..d50c42552863 100644 --- a/src/SignalR/common/testassets/Tests.Utils/InProcessTestServer.cs +++ b/src/SignalR/common/testassets/Tests.Utils/InProcessTestServer.cs @@ -9,16 +9,16 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Testing; namespace Microsoft.AspNetCore.SignalR.Tests { - public abstract class InProcessTestServer : IDisposable + public abstract class InProcessTestServer : IAsyncDisposable { internal abstract event Action ServerLogged; @@ -26,7 +26,7 @@ public abstract class InProcessTestServer : IDisposable public abstract string Url { get; } - public abstract void Dispose(); + public abstract ValueTask DisposeAsync(); } public class InProcessTestServer : InProcessTestServer @@ -34,7 +34,7 @@ public class InProcessTestServer : InProcessTestServer { private readonly ILoggerFactory _loggerFactory; private readonly ILogger _logger; - private IWebHost _host; + private IHost _host; private IHostApplicationLifetime _lifetime; private readonly IDisposable _logToken; private readonly IDisposable _extraDisposable; @@ -91,15 +91,18 @@ private async Task StartServerInner() // We're using 127.0.0.1 instead of localhost to ensure that we use IPV4 across different OSes var url = "http://127.0.0.1:0"; - _host = new WebHostBuilder() - .ConfigureLogging(builder => builder + _host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .ConfigureLogging(builder => builder .SetMinimumLevel(LogLevel.Trace) .AddProvider(new ForwardingLoggerProvider(_loggerFactory))) - .UseStartup(typeof(TStartup)) - .UseKestrel() - .UseUrls(url) - .UseContentRoot(Directory.GetCurrentDirectory()) - .Build(); + .UseStartup(typeof(TStartup)) + .UseKestrel() + .UseUrls(url) + .UseContentRoot(Directory.GetCurrentDirectory()); + }).Build(); _logger.LogInformation("Starting test server..."); var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30)); @@ -116,7 +119,7 @@ private async Task StartServerInner() _logger.LogInformation("Test Server started"); // Get the URL from the server - _url = _host.ServerFeatures.Get().Addresses.Single(); + _url = _host.Services.GetService().Features.Get().Addresses.Single(); _lifetime = _host.Services.GetRequiredService(); _lifetime.ApplicationStopped.Register(() => @@ -144,12 +147,19 @@ private string RenderLogs(IList logs) return builder.ToString(); } - public override void Dispose() + public override async ValueTask DisposeAsync() { - _extraDisposable?.Dispose(); - _logger.LogInformation("Shutting down test server"); - _host.Dispose(); - _loggerFactory.Dispose(); + try + { + _extraDisposable?.Dispose(); + _logger.LogInformation("Start shutting down test server"); + } + finally + { + await _host.StopAsync(); + _host.Dispose(); + _loggerFactory.Dispose(); + } } private class ForwardingLoggerProvider : ILoggerProvider diff --git a/src/SignalR/common/testassets/Tests.Utils/Microsoft.AspNetCore.SignalR.Tests.Utils.csproj b/src/SignalR/common/testassets/Tests.Utils/Microsoft.AspNetCore.SignalR.Tests.Utils.csproj index 782c8410b8d0..f8747db6430c 100644 --- a/src/SignalR/common/testassets/Tests.Utils/Microsoft.AspNetCore.SignalR.Tests.Utils.csproj +++ b/src/SignalR/common/testassets/Tests.Utils/Microsoft.AspNetCore.SignalR.Tests.Utils.csproj @@ -1,4 +1,4 @@ - + $(DefaultNetCoreTargetFramework) diff --git a/src/SignalR/samples/JwtSample/JwtSample.csproj b/src/SignalR/samples/JwtSample/JwtSample.csproj index 552c9d63f26c..b8ac2dc1a7cb 100644 --- a/src/SignalR/samples/JwtSample/JwtSample.csproj +++ b/src/SignalR/samples/JwtSample/JwtSample.csproj @@ -1,4 +1,4 @@ - + $(DefaultNetCoreTargetFramework) diff --git a/src/SignalR/samples/JwtSample/Program.cs b/src/SignalR/samples/JwtSample/Program.cs index a4bff29a3730..06050394b763 100644 --- a/src/SignalR/samples/JwtSample/Program.cs +++ b/src/SignalR/samples/JwtSample/Program.cs @@ -1,29 +1,35 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace JwtSample { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - new WebHostBuilder() - .ConfigureLogging(factory => + return Host.CreateDefaultBuilder(args) + .ConfigureWebHost(webHostBuilder => { - factory.AddConsole(); - factory.AddFilter("Console", level => level >= LogLevel.Information); - factory.AddDebug(); + webHostBuilder + .ConfigureLogging(factory => + { + factory.AddConsole(); + factory.AddFilter("Console", level => level >= LogLevel.Information); + factory.AddDebug(); + }) + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build() - .Run(); + .RunAsync(); } } } diff --git a/src/SignalR/samples/SignalRSamples/Program.cs b/src/SignalR/samples/SignalRSamples/Program.cs index 2f932a18a48f..c56a2c5b598e 100644 --- a/src/SignalR/samples/SignalRSamples/Program.cs +++ b/src/SignalR/samples/SignalRSamples/Program.cs @@ -3,9 +3,11 @@ using System.IO; using System.Net; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using SignalRSamples.Hubs; @@ -13,36 +15,40 @@ namespace SignalRSamples { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { var config = new ConfigurationBuilder() .AddCommandLine(args) .Build(); - var host = new WebHostBuilder() - .UseConfiguration(config) - .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true") - .ConfigureLogging(factory => + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHost(webHostBuilder => { - factory.AddConsole(); - }) - .UseKestrel(options => - { - // Default port - options.ListenLocalhost(5000); - - // Hub bound to TCP end point - options.Listen(IPAddress.Any, 9001, builder => + webHostBuilder + .UseConfiguration(config) + .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true") + .ConfigureLogging((c, factory) => { - builder.UseHub(); - }); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() - .Build(); + factory.AddConfiguration(c.Configuration.GetSection("Logging")); + factory.AddConsole(); + }) + .UseKestrel(options => + { + // Default port + options.ListenLocalhost(5000); + + // Hub bound to TCP end point + options.Listen(IPAddress.Any, 9001, builder => + { + builder.UseHub(); + }); + }) + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }).Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/SignalR/samples/SocialWeather/Program.cs b/src/SignalR/samples/SocialWeather/Program.cs index 426f89226b40..24169976a664 100644 --- a/src/SignalR/samples/SocialWeather/Program.cs +++ b/src/SignalR/samples/SocialWeather/Program.cs @@ -2,29 +2,35 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace SocialWeather { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() - .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true") - .ConfigureLogging(factory => + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHost(webHostBuilder => { - factory.AddConsole(); - factory.AddFilter("Console", level => level >= LogLevel.Information); + webHostBuilder + .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true") + .ConfigureLogging(factory => + { + factory.AddConsole(); + factory.AddFilter("Console", level => level >= LogLevel.Information); + }) + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/SignalR/samples/SocialWeather/SocialWeather.csproj b/src/SignalR/samples/SocialWeather/SocialWeather.csproj index ea9308fee5e6..fe8e362e2cd3 100644 --- a/src/SignalR/samples/SocialWeather/SocialWeather.csproj +++ b/src/SignalR/samples/SocialWeather/SocialWeather.csproj @@ -1,4 +1,4 @@ - + $(DefaultNetCoreTargetFramework) diff --git a/src/SignalR/server/SignalR/test/EndToEndTests.cs b/src/SignalR/server/SignalR/test/EndToEndTests.cs index 675d939a3af6..fcddc316cf41 100644 --- a/src/SignalR/server/SignalR/test/EndToEndTests.cs +++ b/src/SignalR/server/SignalR/test/EndToEndTests.cs @@ -36,7 +36,7 @@ public class EndToEndTests : FunctionalTestBase [Fact] public async Task CanStartAndStopConnectionUsingDefaultTransport() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var url = server.Url + "/echo"; // The test should connect to the server using WebSockets transport on Windows 8 and newer. @@ -56,7 +56,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ErrorStartingTransport"; } - using (var server = await StartServer(expectedErrorsFilter: ExpectedErrors)) + await using (var server = await StartServer(expectedErrorsFilter: ExpectedErrors)) { var url = server.Url + "/echo"; // The test should connect to the server using WebSockets transport on Windows 8 and newer. @@ -74,7 +74,7 @@ bool ExpectedErrors(WriteContext writeContext) [LogLevel(LogLevel.Trace)] public async Task CanStartAndStopConnectionUsingGivenTransport(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var url = server.Url + "/echo"; var connection = new HttpConnection(new HttpConnectionOptions { Url = new Uri(url), Transports = transportType, DefaultTransferFormat = TransferFormat.Text }, LoggerFactory); @@ -87,7 +87,7 @@ public async Task CanStartAndStopConnectionUsingGivenTransport(HttpTransportType [WebSocketsSupportedCondition] public async Task WebSocketsTest() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); @@ -125,7 +125,7 @@ public async Task WebSocketsTest() [WebSocketsSupportedCondition] public async Task WebSocketsReceivesAndSendsPartialFramesTest() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); @@ -164,7 +164,7 @@ public async Task WebSocketsReceivesAndSendsPartialFramesTest() [WebSocketsSupportedCondition] public async Task HttpRequestsNotSentWhenWebSocketsTransportRequestedAndSkipNegotiationSet() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); var url = server.Url + "/echo"; @@ -214,7 +214,7 @@ public async Task HttpRequestsNotSentWhenWebSocketsTransportRequestedAndSkipNego [InlineData(HttpTransportType.ServerSentEvents)] public async Task HttpConnectionThrowsIfSkipNegotiationSetAndTransportIsNotWebSockets(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); var url = server.Url + "/echo"; @@ -257,7 +257,7 @@ public async Task HttpConnectionThrowsIfSkipNegotiationSetAndTransportIsNotWebSo [LogLevel(LogLevel.Trace)] public async Task ConnectionCanSendAndReceiveMessages(HttpTransportType transportType, TransferFormat requestedTransferFormat) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); @@ -315,7 +315,7 @@ public async Task ConnectionCanSendAndReceiveMessages(HttpTransportType transpor public async Task ConnectionCanSendAndReceiveDifferentMessageSizesWebSocketsTransport(int length) { var message = new string('A', length); - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); @@ -379,7 +379,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ErrorWithNegotiation"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var logger = LoggerFactory.CreateLogger(); @@ -403,7 +403,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ErrorStartingTransport"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var logger = LoggerFactory.CreateLogger(); @@ -433,7 +433,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ErrorWithNegotiation"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var logger = LoggerFactory.CreateLogger(); @@ -469,7 +469,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ErrorWithNegotiation"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var logger = LoggerFactory.CreateLogger(); @@ -539,7 +539,7 @@ public async Task ServerClosesConnectionWithErrorIfHubCannotBeCreated_LongPollin private async Task ServerClosesConnectionWithErrorIfHubCannotBeCreated(HttpTransportType transportType) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var logger = LoggerFactory.CreateLogger(); @@ -604,7 +604,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ErrorWithNegotiation"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var logger = LoggerFactory.CreateLogger(); @@ -643,7 +643,7 @@ bool ExpectedErrors(WriteContext writeContext) writeContext.EventId.Name == "ErrorWithNegotiation"; } - using (var server = await StartServer(ExpectedErrors)) + await using (var server = await StartServer(ExpectedErrors)) { var logger = LoggerFactory.CreateLogger(); diff --git a/src/SignalR/server/SignalR/test/MapSignalRTests.cs b/src/SignalR/server/SignalR/test/MapSignalRTests.cs index 8f1a79dc4a22..695a5683c736 100644 --- a/src/SignalR/server/SignalR/test/MapSignalRTests.cs +++ b/src/SignalR/server/SignalR/test/MapSignalRTests.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.SignalR.Tests @@ -29,9 +30,11 @@ public void MapSignalRFailsForInvalidHub() public void NotAddingSignalRServiceThrows() { var executedConfigure = false; - var builder = new WebHostBuilder(); + var builder = new HostBuilder(); - builder + builder.ConfigureWebHost(webHostBuilder => + { + webHostBuilder .UseKestrel() .ConfigureServices(services => { @@ -54,6 +57,7 @@ public void NotAddingSignalRServiceThrows() "'IServiceCollection.AddSignalR' inside the call to 'ConfigureServices(...)' in the application startup code.", ex.Message); }) .UseUrls("http://127.0.0.1:0"); + }); using (var host = builder.Build()) { @@ -338,20 +342,24 @@ private class AuthHub : Hub { } - private IWebHost BuildWebHost(Action configure) + private IHost BuildWebHost(Action configure) { - return new WebHostBuilder() - .UseKestrel() - .ConfigureServices(services => - { - services.AddSignalR(); - }) - .Configure(app => + return new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.UseRouting(); - app.UseEndpoints(endpoints => configure(endpoints)); + webHostBuilder + .UseKestrel() + .ConfigureServices(services => + { + services.AddSignalR(); + }) + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(endpoints => configure(endpoints)); + }) + .UseUrls("http://127.0.0.1:0"); }) - .UseUrls("http://127.0.0.1:0") .Build(); } } diff --git a/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs b/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs index 2c059c3edcfe..6736265a7299 100644 --- a/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs +++ b/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs @@ -53,7 +53,7 @@ public void HttpOptionsSetOntoWebSocketOptions() [WebSocketsSupportedCondition] public async Task WebSocketsTransportStopsSendAndReceiveLoopsWhenTransportIsStopped() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echo"), @@ -67,7 +67,7 @@ await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echo"), [WebSocketsSupportedCondition] public async Task WebSocketsTransportSendsUserAgent() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/httpheader"), @@ -98,7 +98,7 @@ await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/httpheader [WebSocketsSupportedCondition] public async Task WebSocketsTransportSendsXRequestedWithHeader() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/httpheader"), @@ -121,7 +121,7 @@ await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/httpheader [WebSocketsSupportedCondition] public async Task WebSocketsTransportStopsWhenConnectionChannelClosed() { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echo"), @@ -137,7 +137,7 @@ await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echo"), [InlineData(TransferFormat.Binary)] public async Task WebSocketsTransportStopsWhenConnectionClosedByTheServer(TransferFormat transferFormat) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echoAndClose"), transferFormat); @@ -159,7 +159,7 @@ public async Task WebSocketsTransportStopsWhenConnectionClosedByTheServer(Transf [InlineData(TransferFormat.Binary)] public async Task WebSocketsTransportSetsTransferFormat(TransferFormat transferFormat) { - using (var server = await StartServer()) + await using (var server = await StartServer()) { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); diff --git a/src/SignalR/server/StackExchangeRedis/test/RedisServerFixture.cs b/src/SignalR/server/StackExchangeRedis/test/RedisServerFixture.cs index ab063ee02a11..50ecafbb9fae 100644 --- a/src/SignalR/server/StackExchangeRedis/test/RedisServerFixture.cs +++ b/src/SignalR/server/StackExchangeRedis/test/RedisServerFixture.cs @@ -6,12 +6,11 @@ using Microsoft.AspNetCore.SignalR.Tests; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.StackExchangeRedis.Tests { - public class RedisServerFixture : IAsyncLifetime, IDisposable + public class RedisServerFixture : IAsyncLifetime where TStartup : class { public InProcessTestServer FirstServer { get; private set; } @@ -37,13 +36,24 @@ public RedisServerFixture() Docker.Default.Start(_logger); } - public Task DisposeAsync() + public async Task DisposeAsync() { - return Task.CompletedTask; + if (Docker.Default != null) + { + await FirstServer.DisposeAsync(); + await SecondServer.DisposeAsync(); + Docker.Default.Stop(_logger); + _logToken.Dispose(); + } } public async Task InitializeAsync() { + if (Docker.Default == null) + { + return; + } + FirstServer = await StartServer(); SecondServer = await StartServer(); } @@ -60,16 +70,5 @@ private async Task> StartServer() throw; } } - - public void Dispose() - { - if (Docker.Default != null) - { - FirstServer.Dispose(); - SecondServer.Dispose(); - Docker.Default.Stop(_logger); - _logToken.Dispose(); - } - } } }