Уведомление базы данных с использованием signalr и asp.net не отображает данные в пользовательском интерфейсе

Я следовал руководству с одного из онлайн-блогов и смог вывести приложение без ошибок, но главная проблема заключается в том, что он не выдает ошибку, а выводит ее.

Мой класс хаб выглядит так

  public void NotifyAllClients(string msg)
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>();
        context.Clients.All.displayNotification(msg);
    }

My ASPX.CS page looks like this

 protected void Page_Load(object sender, EventArgs e)
    {
        SendNotifications();
    }

    public void SendNotifications()
    {
        string message = string.Empty;
        string conStr = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;

        using (SqlConnection connection = new SqlConnection(conStr))
        {
            string query = "SELECT [Message] FROM [dbo].[MessageBuffer]";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                command.Notification = null;
                SqlDependency dependency = new SqlDependency(command);
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();

                if (reader.HasRows)
                {
                    reader.Read();
                    message = reader[0].ToString();
                }
            }
        }
        NotificationsHub nHub = new NotificationsHub();
        nHub.NotifyAllClients(message);
    }

    private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Type == SqlNotificationType.Change)
        {
            SendNotifications();
        }
    }

и моя страница aspx -

    <!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>


     <script src="Scripts/jquery-1.8.2.min.js"></script>
    <script src="Scripts/jquery.signalR-2.1.2.js"></script>
      <script src="signalr/hubs"></script>
    <script type="text/javascript">
        $(function () {
            var notify = $.connection.notificationsHub;

            notify.client.displayNotification = function (msg) {

                $('#newData').append('<li><strong>' + msg + '</li>');
            };

            $.connection.hub.start();
        });
    </script>



        <div style="padding:10px 0px 10px 10px">
New Messages:
              <ul id="newData"></ul>
        </div>


</body>
</html>

Я сделал разные сэмплы, я использовал один и тот же формат для отображения, я могу получить их в руке, но здесь я застрял с этим. Я получаю значение на странице aspx.cs, она вызывает БД, которую я дал в global.asax. и я добавил sqldependency, enbabled брокер в БД. но проблема все еще там. я ничего не вижу в интерфейсе. заранее спасибо

1 ответ

У меня была похожая проблема некоторое время назад. Я просто использовал атрибут имени метода-концентратора, и он работал для меня. Итак, вы хотите что-то вроде

[HubMethodName("SendNotifications")]
    public string SendNotifications()

А потом на передний конец просто сделать

$.connection.hub.start(function () {
notify.server.SendNotifications();
});

Обновить

Вы могли бы иметь промежуток, как у меня в моем коде. так что-то вроде

<div>
<ul>
  <li>New Messages:<span id="newData">0</span></a></li>
</ul>
</div>

Тогда делай

$('#newData').text(msg);
Другие вопросы по тегам