Reactjs ASP.NET核心3.1信号器不';t偶尔返回数据以响应应用程序

Reactjs ASP.NET核心3.1信号器不';t偶尔返回数据以响应应用程序,reactjs,asp.net-core,signalr,Reactjs,Asp.net Core,Signalr,我正在使用ASP.NET Core 3.1和React.js构建一个应用程序,但当我使用SignalRonconnectedasync时,我会向呼叫者返回一个可用锦标赛的列表 问题是,它工作了大约5次,然后就停止了(只显示前端的微调器,我并没有在控制台中看到一系列锦标赛) 这是我的ASP.NET核心信号器代码: public class GameHub : Hub<IGameClient> { private readonly ITournamentsStore _tourn

我正在使用ASP.NET Core 3.1和React.js构建一个应用程序,但当我使用SignalR
onconnectedasync
时,我会向呼叫者返回一个可用锦标赛的列表

问题是,它工作了大约5次,然后就停止了(只显示前端的微调器,我并没有在控制台中看到一系列锦标赛)

这是我的ASP.NET核心信号器代码:

public class GameHub : Hub<IGameClient>
{
    private readonly ITournamentsStore _tournamentsStore;
    private readonly IMapper _mapper;

    public GameHub(ITournamentsStore tournamentsStore, IMapper mapper)
    {
        _tournamentsStore = tournamentsStore;
        _mapper = mapper;
    }

    public override async Task OnConnectedAsync()
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, "Not playing");

        var availableTournaments = _tournamentsStore.GetAvailableTournaments();
        var availableTournamentsDto = _mapper.Map<List<TournamentDto>>(availableTournaments);

        await Clients.Caller.ShowMainLobby(availableTournamentsDto);

        await base.OnConnectedAsync();
    }
}
公共类游戏中心:中心
{
私人只读ITournamentsStore\u tournamentsStore;
专用只读IMapper\u映射器;
公共游戏中心(ITournamentsStore tournamentsStore,IMapper mapper)
{
_tournamentsStore=tournamentsStore;
_映射器=映射器;
}
公共覆盖异步任务OnConnectedAsync()
{
wait Groups.AddToGroupAsync(Context.ConnectionId,“未播放”);
var availableTournaments=_tournamentsStore.GetAvailableTournaments();
var availableTournamentsDto=_mapper.Map(availableTournaments);
等待客户。来电者。ShowMain大厅(可用TurnamentsDTO);
等待base.OnConnectedAsync();
}
}
反应代码:

import React, { useEffect, useState } from "react";
import { HubConnectionBuilder } from "@microsoft/signalr";
import Spinner from "../common/Spinner";
import MainLobby from "../gameParts/MainLobby";
import { connect } from "react-redux";
import { Redirect, useHistory } from "react-router";

const GamePage = ({ account }) => {
  const history = useHistory();
  const [conn, setConn] = useState(null);
  const [screen, setScreen] = useState("");
  const [tournaments, setTournaments] = useState(null);

  useEffect(() => {
     const newConn = new HubConnectionBuilder()
      .withUrl("/gameHub")
      .withAutomaticReconnect()
      .build();

  setConn(newConn);
   }, []);

  useEffect(() => {
    if (conn) {
      conn
        .start()
        .then((result) => {
          console.log("Connected");

      conn.on("ShowMainLobby", (tournaments) => {
        setTournaments(tournaments);
        console.log(tournaments);
        setScreen("ShowMainLobby");
      });
    })
    .catch((ex) => console.log("connection Failed: ", ex));
}
  }, [conn]);

  function returnToHomeMenu() {
    console.log(conn);
    conn.stop();
    history.push("/");
    console.log("disconnected");
}

  return !account.user.loggedIn ? (
    <Redirect to="/login" />
  ) : screen === "" ? (
    <>
       <Spinner text="Establishing Real Time Connection" />
    </>
   ) : screen === "ShowMainLobby" ? (
     <>
      <MainLobby
        tournaments={tournaments}
       returnToHomeMenu={returnToHomeMenu}
      />
    </>
   ) : (
   <></>
   );
  };

 function mapStateToProps(state) {
  return {
   account: state.account,
   };
 }

 export default connect(mapStateToProps)(GamePage);
import React,{useffect,useState}来自“React”;
从“@microsoft/signal”导入{HubConnectionBuilder};
从“./common/Spinner”导入微调器;
从“./gameParts/MainLobb”导入MainLobb;
从“react redux”导入{connect};
从“react router”导入{Redirect,useHistory};
const GamePage=({account})=>{
const history=useHistory();
const[conn,setConn]=useState(null);
常量[屏幕,设置屏幕]=使用状态(“”);
const[tournaments,setTournaments]=useState(null);
useffect(()=>{
const newConn=new HubConnectionBuilder()
.withUrl(“/gameHub”)
.withAutomaticReconnect()
.build();
setConn(纽康);
}, []);
useffect(()=>{
如果(康涅狄格州){
康涅狄格州
.start()
。然后((结果)=>{
控制台日志(“已连接”);
康涅狄格州(“ShowMainLobble”,(锦标赛)=>{
赛程锦标赛;
控制台日志(锦标赛);
设置屏幕(“ShowMain大厅”);
});
})
.catch((ex)=>console.log(“连接失败:”,ex));
}
}[康涅狄格州];
函数returnToHomeMenu(){
控制台日志(conn);
控制停止();
历史。推送(“/”);
控制台日志(“断开”);
}
return!account.user.loggedIn(
):屏幕==“”(
):screen==“ShowMain大厅”(
) : (
);
};
函数MapStateTops(状态){
返回{
账户:state.account,
};
}
导出默认连接(MapStateTops)(游戏页面);

感谢您的帮助

我不知道你所说的“它能工作大约5次”是什么意思,但如果问题是在连接开始时,你偶尔看不到“ShowMainLobble”的消息,那么可能是因为你在连接后调用connection.on(“ShowMainLobble”)。开始。所以有一场比赛,你应该在连接开始前加上。开始。这工作非常完美,多谢各位