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 TransportType _requestedTransportType;
|
||||
private readonly ILoggerFactory _loggerFactory;
|
||||
private static volatile bool _websocketsSupported = true;
|
||||
|
||||
public DefaultTransportFactory(TransportType requestedTransportType, ILoggerFactory loggerFactory, HttpClient httpClient)
|
||||
{
|
||||
|
|
@ -32,9 +33,16 @@ namespace Microsoft.AspNetCore.Sockets.Client
|
|||
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using System;
|
|||
using System.Net.Http;
|
||||
using Microsoft.AspNetCore.Sockets;
|
||||
using Microsoft.AspNetCore.Sockets.Client;
|
||||
using Microsoft.AspNetCore.Testing.xunit;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Xunit;
|
||||
|
||||
|
|
@ -33,6 +34,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
|||
[Theory]
|
||||
[InlineData(TransportType.WebSockets, typeof(WebSocketsTransport))]
|
||||
[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)
|
||||
{
|
||||
var transportFactory = new DefaultTransportFactory(requestedTransport, loggerFactory: null, httpClient: new HttpClient());
|
||||
|
|
@ -56,11 +58,39 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
[OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2, SkipReason = "No WebSockets Client for this platform")]
|
||||
public void DefaultTransportFactoryCreatesWebSocketsTransportIfAvailable()
|
||||
{
|
||||
Assert.IsType<WebSocketsTransport>(
|
||||
new DefaultTransportFactory(TransportType.All, loggerFactory: null, httpClient: new HttpClient())
|
||||
.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