我想在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
我刚刚发现,我的选择是错误的。 如果我使用互联网上的另一个示例,它就可以工作。 参见:
export function ConnectToSingalR(){
return new HubConnectionBuilder()
.withUrl('http://localhost:18198/messagehub', {
accessTokenFactory: () => {
return getUserAccessToken();
}
})
.withAutomaticReconnect()
.configureLogging(LogLevel.Trace)
.build();
}
但我不明白为什么选项部分会产生这个错误。如果不正确,那是我的错,但我只是期待一个更好且易于理解的错误消息......