Действие не запускается на концентраторе-сигнализаторе при использовании веб-сокетов через балансировщик нагрузки, SSE или любой другой метод работает нормально - PullRequest
3 голосов
/ 28 октября 2019

У меня есть настройка концентратора для функции чата с использованием 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' };
});
...