SignalR: соединение разорвано с ошибкой «ReferenceError: connectionId не определен» - PullRequest
0 голосов
/ 10 января 2019

Я использую библиотеку SignalR для создания приложения чата, после соединения с сервером / концентратором я отправляю имя пользователя, чтобы уведомить всех пользователей, а затем отправляю другое сообщение, чтобы сервер отправил мне сообщения, которые находятся в сети. Я делаю это сразу после установления соединения с сервером. Но при отправке двух запросов / сообщений одновременно соединение разорвалось и выдает следующую ошибку.

Connection disconnected with error 'ReferenceError: connectionId is not defined'

Но если я отправлю один запрос, он будет работать нормально. Почему это происходит? На стороне клиента я использую Vuejs.

Клиент:

ConnectWithServer(){
  // create connection withe hub
}

this.ConnectWithServer((ok) => {
     if (ok === true) {
      var state = this.Connection.connectionState;

      if (state === 1) {

          // First request
          this.SendJoinMessage((status) => {
               if (status === true) {
                  // do stuff
               }
          });

          //Second request
          this.SendMessageToGetConnectedCliets();

      }
    }
});

SendJoinMessage(callBack) {

  this.Connection.invoke("JoinMessage", this.ConnectionId, this.Name).then(() => {
            callBack(true);
        }).catch(err => {
            callBack(false);
        });
    },

SendMessageToGetConnectedCliets() {

        this.Connection.invoke("GetConnectedClients").then(() => {
            // do stuff
        }).catch(err => {
            console.error(err.toString());
        });
 },

Сервер:

 public class Messenger : Hub {

     // First message will be appear here 
     public dynamic JoinMessage(string connectionId, string name) {
        Task<dynamic> result = Task.Run(() => new ClientJoin(this.Clients, this.Context).SendJoinMessageToAll(name));
        result.Wait();

        return result.Result;
     }

    //Second message will be appear here 
    public dynamic GetConnectedClients()  {
        Task<dynamic> result = Task.Run(() => new ClientJoin(this.Clients, this.Context).GetConnectedClients());
        return result.Result;
    }
 }

 public class ClientJoin {
     public dynamic GetConnectedClients() {
        try {
            string __ClientConnectionId = this.Context.ConnectionId;
            IEnumerable<dynamic> clients = (from x in ConnectedDisconnected.Instance.OnlineClientList.ToList()
                                            select new
                                            {
                                                connectionId = x.Value.ConnectionId,
                                                name = x.Value.Name
                                            });

            Task.Run(() => Clients.Client(__ClientConnectionId).SendAsync("OnConnectedClients", clients));
            return new { success = true };
        }
        catch (Exception) { return new { success = false }; }
    }
 }
...