SignalR React - 客户端禁用传输

问题描述 投票:0回答:1

我想在react中实现一个SignalR客户端。

我有一个提供 SignalR Hub 的 aspnet API。使用 C# SignalR 客户端,我可以连接集线器并发送+接收消息。所以看来 SignalR 服务和 CORS 是正确的。

但是当我想连接 React 时,出现以下错误:

Debug: HubConnection failed to start successfully because of error 'Error: Unable to connect 
to the server with any of the available transports.
WebSockets failed: 
Error: 'WebSockets' is disabled by the client.
ServerSentEvents failed: Error: 'ServerSentEvents' is disabled by the client.
LongPolling failed: Error: 'LongPolling' is disabled by the client.'.

我的反应代码:

import { HubConnectionBuilder,LogLevel,HttpTransportType } from '@microsoft/signalr';
import { getUserAccessToken } from '../auth/UserManager';

export function ConnectToSignalR(){
   return  new HubConnectionBuilder()
        .withUrl('http://localhost:18198/messagehub',options=> {
            options.skipNegotiation=false;
            options.transport = HttpTransportType.WebSockets;
            options.accessTokenFactory = ()=>getUserAccessToken();
        return options;})
        .withAutomaticReconnect()
        .configureLogging(LogLevel.Trace)
        .build();
}

export function startSignalRConnection(signalRConnection){
    if (signalRConnection) {
        signalRConnection.start()
              .then(result => {
                  console.log('SingnalR','Connected!');
    
                  signalRConnection.on('TimeWarningMessage', message => {
                     console.log(message);
                  });
              })
              .catch(e => console.log('SingalR Connection failed: ', e));
            }
        
}

应用程序启动后,通过 useEffect 钩子在 React 应用程序的 App.js(主要组件)中调用代码。

“被客户端禁用”是什么意思? 有没有办法禁用这些东西? 我测试的浏览器是当前版本的 Edge 和 Chrome,两者都有同样的问题。 React包的版本是8.0.7,在asp net core端的后端,我使用的是NET8

reactjs asp.net-core signalr signalr.client
1个回答
0
投票

我刚刚发现,我的选择是错误的。 如果我使用互联网上的另一个示例,它就可以工作。 参见:

export function ConnectToSingalR(){
   return  new HubConnectionBuilder()
        .withUrl('http://localhost:18198/messagehub', {
            accessTokenFactory: () => {              
                return getUserAccessToken();
            }
        })
        .withAutomaticReconnect()
        .configureLogging(LogLevel.Trace)
        .build();
}

但我不明白为什么选项部分会产生这个错误。如果不正确,那是我的错,但我只是期待一个更好且易于理解的错误消息......

© www.soinside.com 2019 - 2024. All rights reserved.