У меня есть настройка концентратора для функции чата с использованием Signalr версии 2.4.0. Объединительная плата SQL используется и настраивается стандартным способом, поскольку сайт размещается на двух серверах с использованием облачного балансировщика нагрузки из Rackspace.
При использовании событий, отправляемых сервером, проблем нет, сообщения отправляются через балансировщик нагрузки без проблем. При использовании веб-сокетов onConnected и onDisconnected вызываются как обычно, и соединение устанавливается. Я включил регистрацию сигналов в браузере и не вижу ошибок или проблем. Однако, когда из браузера вызывается действие концентратора, т.е. hub.server.sendaction (); в этом случае для отправки сообщения (хотя оно применяется к любому запускаемому действию, кроме подключения или отключения), вообще ничего не происходит. Действие не запускается, нигде нет ошибок.
Удаление балансировщика нагрузки из уравнения, по-видимому, решает проблему, вызывается действие и сообщение отправляется другому пользователю.
Кто-нибудь может порассуждать о том, в чем здесь проблема? Я включил все формы регистрации, которые я мог встретить, и я не вижу никаких ошибок или проблем. По данным регистрации сигналов, соединение с веб-сокетом устанавливается нормально. В журнале видно, что действие концентратора вызывается правильно. Ясно, что балансировщик нагрузки должен быть как-то задействован, но, поскольку нет проблем с SSE и нет ошибок, я не имею ни малейшего представления о том, почему не вызывается действие?
Правка - По запросу, это хабСодержание действия не включено, так как действие просто не запускается. Существует метод onConnected и onDisconnected, оба запускаются как обычно:
namespace SignalRChat
{
public class NotificationHub : Hub
{
private ApplicationDbContext db = new ApplicationDbContext();
public void Send(int ChatID, string UserID, string message, string
name, string profileImage)
{
//Stuff happens here but it is not being fired at all
}
}
}
Соответствующий JavaScript на странице:
$(function () {
var note = $.connection.notificationHub;
$.connection.hub.logging = true;
$.connection.hub.start().done(function () {
$(document).on("click", "#sendmessage", function () {
note.server.send('@Model.ChatID', '@Model.UserID', $('#message').val(), '@Model.Name', '@Model.ProfileImage');
msgArea.scrollTop = msgArea.scrollHeight;
$('#message').val('').focus();
});
$.connection.hub.qs = { 'name': '@Model.Name', 'UserID': '@Model.UserID', 'connectionGroup': '@Model.ChatID' + '_hub', 'cohortName': '@Model.Cohortname', 'outlog': 'in' };
});