Я работаю над веб-приложением SignalR Core, которое использует следующий стек:
- ASP.NET Core 2.1 превью 2 (2.1.0-preview2-final)
- SignalR Core 1.0 превью 2 (1.0.0-preview2-final)
- Microsoft.AspNetCore.Cors (2.1.0-preview2-final)
- Microsoft.AspNetCore.WebSockets (2.1.0-preview2-final)
Клиент использует пакет SignalR NPM (@ aspnet / signalr).
Приложение настроено так:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(
"CorsPolicy",
builder => builder
.AllowCredentials()
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
services.AddSignalR();
}
public void Configure(IApplicationBuilder app)
{
app.UseCors("CorsPolicy");
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseWebSockets();
app.UseSignalR(routes =>
{
routes.MapHub<ClientHub>("/hubs/notifications");
});
}
При локальной работе в http://localhost
клиент подключается по протоколу WS. Но при развертывании в службе приложений Azure он возвращается к SSE.
Журнал браузера показывает:
WebSocket connection to 'wss://xxxxxx.azurewebsites.net/hubs/notifications?id=ZRniWKpMLMPIyLhS5RSyAg' failed: Error during WebSocket handshake: Unexpected response code: 503
Information: SSE connected to https://xxxxxx.azurewebsites.net/hubs/notifications?id=ig47oOdQzbasdgrlr0cHaw
Метод negotiate
, похоже, возвращает поддержку Websockets:
{"connectionId":"ZRniWKpMLMPIyLhS5RSyAg",
"availableTransports":[
{"transport":"WebSockets","transferFormats":["Text","Binary"]},
{"transport":"ServerSentEvents","transferFormats":["Text"]},
{"transport":"LongPolling","transferFormats":["Text","Binary"]}]
}
Я что-то упускаю? Или WSS еще не поддерживается?