TransportFactory should not try creating WebSocket transport on Win7/2008R2
This commit is contained in:
parent
a181dc558a
commit
db66b1e553
|
|
@ -12,6 +12,7 @@ namespace Microsoft.AspNetCore.Sockets.Client
|
||||||
private readonly HttpClient _httpClient;
|
private readonly HttpClient _httpClient;
|
||||||
private readonly TransportType _requestedTransportType;
|
private readonly TransportType _requestedTransportType;
|
||||||
private readonly ILoggerFactory _loggerFactory;
|
private readonly ILoggerFactory _loggerFactory;
|
||||||
|
private static volatile bool _websocketsSupported = true;
|
||||||
|
|
||||||
public DefaultTransportFactory(TransportType requestedTransportType, ILoggerFactory loggerFactory, HttpClient httpClient)
|
public DefaultTransportFactory(TransportType requestedTransportType, ILoggerFactory loggerFactory, HttpClient httpClient)
|
||||||
{
|
{
|
||||||
|
|
@ -32,9 +33,16 @@ namespace Microsoft.AspNetCore.Sockets.Client
|
||||||
|
|
||||||
public ITransport CreateTransport(TransportType availableServerTransports)
|
public ITransport CreateTransport(TransportType availableServerTransports)
|
||||||
{
|
{
|
||||||
if ((availableServerTransports & TransportType.WebSockets & _requestedTransportType) == TransportType.WebSockets)
|
if (_websocketsSupported && (availableServerTransports & TransportType.WebSockets & _requestedTransportType) == TransportType.WebSockets)
|
||||||
{
|
{
|
||||||
return new WebSocketsTransport(_loggerFactory);
|
try
|
||||||
|
{
|
||||||
|
return new WebSocketsTransport(_loggerFactory);
|
||||||
|
}
|
||||||
|
catch (PlatformNotSupportedException)
|
||||||
|
{
|
||||||
|
_websocketsSupported = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((availableServerTransports & TransportType.ServerSentEvents & _requestedTransportType) == TransportType.ServerSentEvents)
|
if ((availableServerTransports & TransportType.ServerSentEvents & _requestedTransportType) == TransportType.ServerSentEvents)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using Microsoft.AspNetCore.Sockets;
|
using Microsoft.AspNetCore.Sockets;
|
||||||
using Microsoft.AspNetCore.Sockets.Client;
|
using Microsoft.AspNetCore.Sockets.Client;
|
||||||
|
using Microsoft.AspNetCore.Testing.xunit;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -33,6 +34,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(TransportType.WebSockets, typeof(WebSocketsTransport))]
|
[InlineData(TransportType.WebSockets, typeof(WebSocketsTransport))]
|
||||||
[InlineData(TransportType.LongPolling, typeof(LongPollingTransport))]
|
[InlineData(TransportType.LongPolling, typeof(LongPollingTransport))]
|
||||||
|
[OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2, SkipReason = "No WebSockets Client for this platform")]
|
||||||
public void DefaultTransportFactoryCreatesRequestedTransportIfAvailable(TransportType requestedTransport, Type expectedTransportType)
|
public void DefaultTransportFactoryCreatesRequestedTransportIfAvailable(TransportType requestedTransport, Type expectedTransportType)
|
||||||
{
|
{
|
||||||
var transportFactory = new DefaultTransportFactory(requestedTransport, loggerFactory: null, httpClient: new HttpClient());
|
var transportFactory = new DefaultTransportFactory(requestedTransport, loggerFactory: null, httpClient: new HttpClient());
|
||||||
|
|
@ -56,11 +58,39 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
[OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2, SkipReason = "No WebSockets Client for this platform")]
|
||||||
public void DefaultTransportFactoryCreatesWebSocketsTransportIfAvailable()
|
public void DefaultTransportFactoryCreatesWebSocketsTransportIfAvailable()
|
||||||
{
|
{
|
||||||
Assert.IsType<WebSocketsTransport>(
|
Assert.IsType<WebSocketsTransport>(
|
||||||
new DefaultTransportFactory(TransportType.All, loggerFactory: null, httpClient: new HttpClient())
|
new DefaultTransportFactory(TransportType.All, loggerFactory: null, httpClient: new HttpClient())
|
||||||
.CreateTransport(TransportType.All));
|
.CreateTransport(TransportType.All));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(TransportType.WebSockets, typeof(LongPollingTransport))]
|
||||||
|
[InlineData(TransportType.LongPolling, typeof(LongPollingTransport))]
|
||||||
|
public void DefaultTransportFactoryCreatesRequestedTransportIfAvailable_Win7(TransportType requestedTransport, Type expectedTransportType)
|
||||||
|
{
|
||||||
|
if (!WebsocketsSupported())
|
||||||
|
{
|
||||||
|
var transportFactory = new DefaultTransportFactory(requestedTransport, loggerFactory: null, httpClient: new HttpClient());
|
||||||
|
Assert.IsType(expectedTransportType,
|
||||||
|
transportFactory.CreateTransport(TransportType.All));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool WebsocketsSupported()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new System.Net.WebSockets.ClientWebSocket();
|
||||||
|
}
|
||||||
|
catch (PlatformNotSupportedException)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue