¿Cuál es la diferencia entre
this.hubConnection = new signalR.HubConnectionBuilder() .withUrl(environment.API_URL + "invoicinghub", { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets }) .withAutomaticReconnect([0, 2000, 10000, 30000, null]) .build();y
this.hubConnection = new signalR.HubConnectionBuilder() .withUrl(environment.API_URL + "invoicinghub", { transport: signalR.HttpTransportType.WebSockets }) .withAutomaticReconnect([0, 2000, 10000, 30000, null]) .build();¿Qué significa esto skipNegotiation: verdadero.
¡Gracias!
En SignalR, el cliente primero envía una solicitud de negociación al servidor y el servidor responde con una URL de redirección y un token de acceso, si lo hay.
Solicitud de cliente
{ "connectionId":"807809a5-31bf-470d-9e23-afaee35d8a0d", "availableTransports":[ { "transport": "WebSockets", "transferFormats": [ "Text", "Binary" ] }, { "transport": "ServerSentEvents", "transferFormats": [ "Text" ] }, { "transport": "LongPolling", "transferFormats": [ "Text", "Binary" ] } ] }Respuesta del servidor
{ "url":"https://test.service.signalr.net/client/?hub=chat&...", "accessToken":"<a typical JWT token>" }Solo después de recibir la respuesta del servidor, el cliente establece una conexión.
En SignalR Core, pero no en SignalR ASP, esto requiere sesiones permanentes. Para evitar el uso de sesiones pegajosas, el cliente debe omitir la negociación, pero solo puede usar websockets sin Azure.
Fuentes: