в моем приложении mpc asp.net Я использую signalR для уведомления изменений db в приложении. моя проблема заключается в том, чтобы перезагрузить страницу. клиент signalR вызывается несколько раз.Несколько вызовов от клиента SignalR
я использовал SqlDependency
для прибудете БД SQL изменяет свой код, как показано ниже
public List<Load> GetAllReportSignalR()
{
var loads = new List<Load>();
var connectionString = _context.Database.Connection.ConnectionString;
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(@"SELECT LoadId, [FileName], LoadTypeId, CreatedDate, CreatedBy, LoadStatusId FROM [dbo].[Load]", connection))
{
command.Notification = null;
var dependency = new SqlDependency(command);
dependency.OnChange +=new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
loads.Add(
new Load
{
FileName = (string)reader["FileName"],
CreatedBy = (string)reader["CreatedBy"],
CreatedDate = (DateTime)reader["CreatedDate"],
LoadId = (int)reader["LoadId"],
LoadStatusId = (int)reader["LoadStatusId"],
LoadTypeId = (short)reader["LoadTypeId"]
});
}
}
}
return loads;
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
Notifier.UpdateDataTable();
}
}
На мой хаб
[HubMethodName("updateDataTable")]
public void UpdateDataTable()
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<Notifier>();
context.Clients.All.updateData();
}
тогда я называю signalR клиент
var notifier = $.connection.notifier;
notifier.client.updateData = function() {
$.ajax({
type: 'POST',
url: '/Home/LoadData',
success: function (d) {
reloadTbl(d)
}
});
};
$.connection.hub.start().done(function() {
$.ajax({
type: 'POST',
url: '/Home/LoadData',
success: function (d) {
reloadTbl(d)
}
});
}).fail(function(e) {
});
я начал и остановился SqlDependency
на Application_Start()
и Application_End()
я сделал следовать ниже примеру, и имеет те же проблемы (CodeProject Tutorial)
Я думаю, нам нужно немного больше кода, чтобы понять, почему его вызывают дважды. IE большая часть кода Javascript – Luke
привет обновленный код с полным кодом. и на стороне клиента это код, который я использую. – Gayan
Игнорируйте этот последний комментарий, я просто посмотрел код на этой странице, и он такой же, как ваш. – Luke