Ошибка во время рукопожатия WebSocket: неожиданный код ответа: 502 при подключении в Azure с помощью ocelot gateway

#azure #websocket #signalr #ocelot

#azure #websocket #signalr #ocelot

Вопрос:

Я использую SignalR в своем приложении и получаю ошибку при загрузке шлюза ocelot на портал azure

Мой код ts

 this.hubConnection = new signalR.HubConnectionBuilder()
        .withUrl("https://url.azurewebsites.net/gatewayOcelot/notification", {
            skipNegotiation: true,
            transport: signalR.HttpTransportType.WebSockets
        })
        .build();
  

и маршрут ocelot

 {
  "UpstreamPathTemplate": "/gatewayOcelot/{url}",
  "UpstreamHttpMethod": [ "Get", "Put", "Delete", "Post", "Patch", "OPTIONS" ],
  "DownstreamPathTemplate": "/api/{url}",
  "DownstreamScheme": "wss",
  "DownstreamHostAndPorts": [
    {
      "Host": "apiURL.com",
      "Port": 443
    }
  ],
  "HttpHandlerOptions": {
    "AllowAutoRedirect": true
  }
},
  

код запуска

  app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
          
            endpoints.MapHub<NotificationHub>("/api/notification");
        });
  

получить ошибку

 WebSocket connection to 'wss://url.azurewebsites.net/gatewayOcelot/notification' failed: Error during WebSocket handshake: Unexpected response code: 502
  

Ответ №1:

Просто двойная проверка: WebSocket должен быть настроен на Ocelot:

  Configure(app =>
{
    app.UseWebSockets();
    app.UseOcelot().Wait();
})
  

и в ocelot.json

 {
     "DownstreamPathTemplate": "/ws",
     "UpstreamPathTemplate": "/",
     "DownstreamScheme": "ws",
     "DownstreamHostAndPorts": [
         {
             "Host": "localhost",
             "Port": 5001
         }
     ],
 }
  

https://ocelot.readthedocs.io/en/latest/features/websockets.html#:~:text=Ocelot supports proxying websockets with,your application to use WebSockets.

Комментарии:

1. Я уже добавляю ocelot при запуске public void Configure (приложение IApplicationBuilder, приложение IWebHostEnvironment env) { приложение. Используйте WebSockets(); app.UseOcelot().Wait(); }

2. затем вы должны выполнить диагностику насекомых и решить проблемы => доступность и производительность вашего плана обслуживания приложений. ( 502 ошибки происходят на уровне IIS)

3. диагностика и решение проблемы: learn.microsoft.com/en-us/azure/app-service /…