Уведомление базы данных с использованием 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);