Я использую библиотеку 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 }; }
}
}