API review feedback (#1974)

- Remove SetHttpContext
- Remove HttpContextFeature
- Add and implement IHttpTransportFeature on HttpConnectionContext
- Remove ConnectionMetadataNames
This commit is contained in:
David Fowler 2018-04-12 03:50:14 -07:00 committed by GitHub
parent d4773e831c
commit 8b1a7e9199
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 39 additions and 62 deletions

View File

@ -6,6 +6,7 @@ using System.Reactive.Linq;
using System.Threading.Channels; using System.Threading.Channels;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Http.Connections.Features;
using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.SignalR;
namespace FunctionalTests namespace FunctionalTests
@ -63,7 +64,7 @@ namespace FunctionalTests
public string GetActiveTransportName() public string GetActiveTransportName()
{ {
return Context.Items[ConnectionMetadataNames.Transport].ToString(); return Context.Features.Get<IHttpTransportFeature>().TransportType.ToString();
} }
public ComplexObject EchoComplexObject(ComplexObject complexObject) public ComplexObject EchoComplexObject(ComplexObject complexObject)

View File

@ -7,6 +7,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Connections;
using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Http.Connections.Features;
namespace SignalRSamples.ConnectionHandlers namespace SignalRSamples.ConnectionHandlers
{ {
@ -18,7 +19,9 @@ namespace SignalRSamples.ConnectionHandlers
{ {
Connections.Add(connection); Connections.Add(connection);
await Broadcast($"{connection.ConnectionId} connected ({connection.Items[ConnectionMetadataNames.Transport]})"); var transportType = connection.Features.Get<IHttpTransportFeature>()?.TransportType;
await Broadcast($"{connection.ConnectionId} connected ({transportType})");
try try
{ {
@ -51,7 +54,7 @@ namespace SignalRSamples.ConnectionHandlers
{ {
Connections.Remove(connection); Connections.Remove(connection);
await Broadcast($"{connection.ConnectionId} disconnected ({connection.Items[ConnectionMetadataNames.Transport]})"); await Broadcast($"{connection.ConnectionId} disconnected ({transportType})");
} }
} }

View File

@ -1,10 +0,0 @@
// 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.
namespace Microsoft.AspNetCore.Http.Connections
{
public static class ConnectionMetadataNames
{
public static readonly string Transport = nameof(Transport);
}
}

View File

@ -12,9 +12,4 @@ namespace Microsoft.AspNetCore.Http.Connections.Features
{ {
HttpContext HttpContext { get; set; } HttpContext HttpContext { get; set; }
} }
public class HttpContextFeature : IHttpContextFeature
{
public HttpContext HttpContext { get; set; }
}
} }

View File

@ -0,0 +1,15 @@
// 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;
using System.Collections.Generic;
using System.Text;
using Microsoft.AspNetCore.Http;
namespace Microsoft.AspNetCore.Http.Connections.Features
{
public interface IHttpTransportFeature
{
HttpTransportType TransportType { get; }
}
}

View File

@ -24,7 +24,8 @@ namespace Microsoft.AspNetCore.Http.Connections
IConnectionUserFeature, IConnectionUserFeature,
IConnectionHeartbeatFeature, IConnectionHeartbeatFeature,
ITransferFormatFeature, ITransferFormatFeature,
IHttpContextFeature IHttpContextFeature,
IHttpTransportFeature
{ {
private readonly object _heartbeatLock = new object(); private readonly object _heartbeatLock = new object();
private List<(Action<object> handler, object state)> _heartbeatHandlers; private List<(Action<object> handler, object state)> _heartbeatHandlers;
@ -62,6 +63,7 @@ namespace Microsoft.AspNetCore.Http.Connections
Features.Set<IConnectionHeartbeatFeature>(this); Features.Set<IConnectionHeartbeatFeature>(this);
Features.Set<ITransferFormatFeature>(this); Features.Set<ITransferFormatFeature>(this);
Features.Set<IHttpContextFeature>(this); Features.Set<IHttpContextFeature>(this);
Features.Set<IHttpTransportFeature>(this);
} }
public HttpConnectionContext(string id, IDuplexPipe transport, IDuplexPipe application, ILogger logger = null) public HttpConnectionContext(string id, IDuplexPipe transport, IDuplexPipe application, ILogger logger = null)

View File

@ -13,16 +13,5 @@ namespace Microsoft.AspNetCore.Http.Connections
{ {
return connection.Features.Get<IHttpContextFeature>()?.HttpContext; return connection.Features.Get<IHttpContextFeature>()?.HttpContext;
} }
public static void SetHttpContext(this ConnectionContext connection, HttpContext httpContext)
{
var feature = connection.Features.Get<IHttpContextFeature>();
if (feature == null)
{
feature = new HttpContextFeature();
connection.Features.Set(feature);
}
feature.HttpContext = httpContext;
}
} }
} }

View File

@ -504,7 +504,6 @@ namespace Microsoft.AspNetCore.Http.Connections
if (connection.TransportType == HttpTransportType.None) if (connection.TransportType == HttpTransportType.None)
{ {
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
} }
else if (connection.TransportType != transportType) else if (connection.TransportType != transportType)
{ {

View File

@ -107,7 +107,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var pipeOptions = new PipeOptions(pauseWriterThreshold: 8, resumeWriterThreshold: 4); var pipeOptions = new PipeOptions(pauseWriterThreshold: 8, resumeWriterThreshold: 4);
var connection = manager.CreateConnection(pipeOptions, pipeOptions); var connection = manager.CreateConnection(pipeOptions, pipeOptions);
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
using (var requestBody = new MemoryStream()) using (var requestBody = new MemoryStream())
using (var responseBody = new MemoryStream()) using (var responseBody = new MemoryStream())
@ -265,7 +264,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.WebSockets; connection.TransportType = HttpTransportType.WebSockets;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.WebSockets;
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
@ -303,7 +301,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
await connection.DisposeAsync(closeGracefully: false); await connection.DisposeAsync(closeGracefully: false);
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
@ -342,7 +339,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
@ -404,7 +400,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
@ -468,7 +463,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
using (var requestBody = new MemoryStream()) using (var requestBody = new MemoryStream())
using (var responseBody = new MemoryStream()) using (var responseBody = new MemoryStream())
@ -518,7 +512,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
// Allow a maximum of one caller to use code at one time // Allow a maximum of one caller to use code at one time
var callerTracker = new SemaphoreSlim(1, 1); var callerTracker = new SemaphoreSlim(1, 1);
@ -604,7 +597,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
using (var requestBody = new MemoryStream()) using (var requestBody = new MemoryStream())
using (var responseBody = new MemoryStream()) using (var responseBody = new MemoryStream())
@ -804,7 +796,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.ServerSentEvents; connection.TransportType = HttpTransportType.ServerSentEvents;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.ServerSentEvents;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -833,7 +824,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.ServerSentEvents; connection.TransportType = HttpTransportType.ServerSentEvents;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.ServerSentEvents;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = MakeRequest("/foo", connection); var context = MakeRequest("/foo", connection);
@ -861,7 +851,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -889,7 +878,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -916,7 +904,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.WebSockets; connection.TransportType = HttpTransportType.WebSockets;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.WebSockets;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -947,7 +934,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -991,7 +977,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1030,7 +1015,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
connection.Status = HttpConnectionContext.ConnectionStatus.Disposed; connection.Status = HttpConnectionContext.ConnectionStatus.Disposed;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1059,7 +1043,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1095,7 +1078,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.ServerSentEvents; connection.TransportType = HttpTransportType.ServerSentEvents;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.ServerSentEvents;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1131,7 +1113,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1166,7 +1147,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1209,7 +1189,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1242,7 +1221,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
var services = new ServiceCollection(); var services = new ServiceCollection();
@ -1289,7 +1267,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
var services = new ServiceCollection(); var services = new ServiceCollection();
@ -1338,7 +1315,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(new ResponseFeature()); context.Features.Set<IHttpResponseFeature>(new ResponseFeature());
@ -1396,7 +1372,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(new ResponseFeature()); context.Features.Set<IHttpResponseFeature>(new ResponseFeature());
@ -1479,7 +1454,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
context.Features.Set<IHttpResponseFeature>(new ResponseFeature()); context.Features.Set<IHttpResponseFeature>(new ResponseFeature());
@ -1538,7 +1512,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var context = new DefaultHttpContext(); var context = new DefaultHttpContext();
var services = new ServiceCollection(); var services = new ServiceCollection();
@ -1593,7 +1566,6 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = HttpTransportType.LongPolling; connection.TransportType = HttpTransportType.LongPolling;
connection.Items[ConnectionMetadataNames.Transport] = HttpTransportType.LongPolling;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
@ -1690,7 +1662,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.TransportType = transportType; connection.TransportType = transportType;
connection.Items[ConnectionMetadataNames.Transport] = transportType;
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {

View File

@ -10,6 +10,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Http.Connections.Features;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
@ -77,7 +78,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
public string GetActiveTransportName() public string GetActiveTransportName()
{ {
return Context.Items[ConnectionMetadataNames.Transport].ToString(); return Context.Features.Get<IHttpTransportFeature>().TransportType.ToString();
} }
} }

View File

@ -13,6 +13,7 @@ using MessagePack.Formatters;
using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Connections;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Http.Connections.Features;
using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.AspNetCore.SignalR.Internal;
using Microsoft.AspNetCore.SignalR.Internal.Protocol; using Microsoft.AspNetCore.SignalR.Internal.Protocol;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -1760,7 +1761,11 @@ namespace Microsoft.AspNetCore.SignalR.Tests
using (var client = new TestClient()) using (var client = new TestClient())
{ {
var httpContext = new DefaultHttpContext(); var httpContext = new DefaultHttpContext();
client.Connection.SetHttpContext(httpContext); var feature = new TestHttpContextFeature
{
HttpContext = httpContext
};
client.Connection.Features.Set<IHttpContextFeature>(feature);
var connectionHandlerTask = await client.ConnectAsync(connectionHandler); var connectionHandlerTask = await client.ConnectAsync(connectionHandler);
await client.Connected.OrTimeout(); await client.Connected.OrTimeout();
@ -1985,5 +1990,10 @@ namespace Microsoft.AspNetCore.SignalR.Tests
yield return new[] { typeof(MethodHub) }; yield return new[] { typeof(MethodHub) };
yield return new[] { typeof(HubT) }; yield return new[] { typeof(HubT) };
} }
public class TestHttpContextFeature : IHttpContextFeature
{
public HttpContext HttpContext { get; set; }
}
} }
} }