Я создал основное чат-приложение. net, используя SignalR, и мне нужно перейти к следующему пользователю, нажав кнопку «Далее». Когда я нажимаю следующую кнопку, она вызывает метод "getRemoteClientNext" внутри класса Hub
public async Task getRemoteClientNext(string RemoteUserId)
{
var name = Context.User.Identity.Name;
var CurrentAppUser = _userManager.FindByNameAsync(name);
if(RemoteUserId != null) {
using (var db = _dBContext)
{
var remotename = db.Users.Find(RemoteUserId);
var RemoteUser = db.Connections.Where(c => c.UsersId != CurrentAppUser.Result.Id && c.UsersId != RemoteUserId && c.RemoteConnected == false).AsEnumerable().GroupBy(c => c.UsersId);
//var remoteConnection = db.Connections.Where(u => u.UsersId == CurrentAppUser.Result.Id || u.UsersId == RemoteUserId).ToList();
//remoteConnection.ForEach(i => i.RemoteConnected = false);
var currntUserConnection = db.Connections.Where(u => u.UsersId == CurrentAppUser.Result.Id).AsEnumerable().FirstOrDefault();
currntUserConnection.RemoteConnected = false;
db.SaveChanges();
var RemoteUserConnection = db.Connections.Where(u => u.UsersId == RemoteUserId).AsEnumerable().FirstOrDefault();
if (RemoteUserConnection != null)
{
RemoteUserConnection.RemoteConnected = false;
}
db.SaveChanges();
var connec = db.Connections.Where(c => c.UsersId == RemoteUserId);
if (connec.Count() == 0)
{
await Clients.Caller.SendAsync("ClienErrors", "The user is no longer connected");
}
else
{
foreach (var connection in connec)
{
await Clients.Client(connection.ConnectionID).SendAsync("maintainConnectionStatus", "Connecting a remote user......");
}
}
await Clients.Caller.SendAsync("maintainConnectionStatus", "Connecting a remote user......");
if (RemoteUser.Count() == 0)
{
await Clients.Caller.SendAsync("maintainConnectionStatus", "Connecting a remote user......");
}
else
{
var selectedRemoteUser = RemoteUser.First().ToList();
var currentUserConnection = db.Connections.Where(u => u.UsersId == CurrentAppUser.Result.Id).AsEnumerable().FirstOrDefault();
// selectedRemoteUser.ForEach(c => c.RemoteConnected = true, c.Remo) ;
foreach(Connections con in selectedRemoteUser)
{
con.RemoteConnected = true;
con.RemoteConnectionID = currentUserConnection.ConnectionID;
currentUserConnection.RemoteConnectionID = con.ConnectionID;
}
// var currentUserConnection = db.Connections.Where(u => u.UsersId == CurrentAppUser.Result.Id).AsEnumerable().FirstOrDefault();
var RemoteId = selectedRemoteUser.Select(u => u.UsersId).FirstOrDefault();
var RemoteName = db.Users.Find(RemoteId);
currentUserConnection.RemoteConnected = true;
db.SaveChanges();
//var RemoteId = selectedRemoteUser.Select(u => u.UsersId).FirstOrDefault();
//var RemoteName = db.Users.Find(RemoteId);
var connec2 = db.Connections.Where(c => c.UsersId == RemoteId);
if (connec2.Count() ==0)
{
await Clients.Caller.SendAsync("ClienErrors", "The user is no longer connected");
}
else
{
foreach (var connection in connec2)
{
await Clients.Client(connection.ConnectionID).SendAsync("SendRemoteUserId", CurrentAppUser.Result.Id, CurrentAppUser.Result.FirstName);
}
}
await Clients.Caller.SendAsync("SendRemoteUserId", RemoteId, RemoteName.FirstName);
}
}
}
}
в java сценарии, событие выглядит как
document.getElementById("next").addEventListener("click", function (event) {
connection.invoke("getRemoteClientNext", RemoteUserId);
});
Проблема, которую я получил, когда я нажимаю следующую кнопку, «getRemoteClientNext» будет срабатывать и работать нормально, когда он отлаживается. Если я отключу все точки отладки и запустите приложение, это не будет работать. Но другие функции, такие как отправка сообщений чата с использованием концентратора, работают нормально. Затем я проверяю консоль и вижу сообщение об ошибке
Uncaught (in promise) Error: An unexpected error occurred invoking 'getRemoteClientNext' on the server.
at _this.callbacks. (signalr.js:2088)
at HubConnection.processIncomingData (signalr.js:2182)
at WebSocketTransport.HubConnection.connection.onreceive (signalr.js:1905)
at WebSocket.webSocket.onmessage (signalr.js:3949)
. Я удалил SignalR и попытался установить его снова, но он не работает, и в добавлении библиотеки на стороне клиента также отображается только Jquery .SignalR. js и Jquery .SignalR.min. js. Поэтому я добавил файл Signalr. js вручную из другого проекта.
Может кто-нибудь сказать мне, почему это происходит, это ошибка в библиотеке SignalR