ASP.NET mvc 5'te bir uygulama geliştiriyorum. Bu projede güncel verileri güncel olarak göstermek için signalR kullanıyorum. Bu, herhangi bir verinin, uygulama kullanıcı arayüzünde yükleneceğinden daha fazla değişeceği anlamına gelir. Ama maalesef sayfayı yenilemediğim sürece otomatik olarak yüklenmiyor. SignalR Veritabanı Güncellemesi Bildirimi
İşte aşağıda benim kodudur:Hub :
[HubName("statusLog")]
public class StatusLogHub : Hub
{
[HubMethodName("sendExportStatus")]
public void SendExportStatus()
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<StatusLogHub>();
Clients.All.updateStatus();
}
}
Repository :
public class EmailStatusLogRepository
{
readonly string _connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
public IEnumerable<EmailStatusLog> GetExportStatus()
{
var messages = new List<EmailStatusLog>();
using (var connection = new SqlConnection(_connString))
{
connection.Open();
using (var command = new SqlCommand(@"SELECT * FROM dbo.EmailStatusLogs WHERE ExportStatus = 1 AND CAST(CONVERT(VARCHAR,Date,101) AS DATETIME)=CAST(CONVERT(VARCHAR,'" + DateTime.Now.Date.ToString("MM/dd/yyyy") + @"',101) AS DATETIME)", 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())
{
messages.Add(item: new EmailStatusLog { Id = (int)reader["Id"], Investor_Code = (string)reader["Investor_Code"], EmailId = reader["EmailId"] != DBNull.Value ? (string)reader["EmailId"] : "", Date = (string)reader["Date"], ReportName = (string)reader["ReportName"], ExportStatus = (bool)reader["ExportStatus"], EmailSendStatus = (bool)reader["EmailSendStatus"], IsActive = (bool)reader["IsActive"] });
}
}
}
return messages;
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change)
{
StatusLogHub statusLogHub = new StatusLogHub();
statusLogHub.SendExportStatus();
}
}
}
//Code from where I am updating DB:
public void ExportStatus()
{
List<EmailStatusLog> lstEmailStatusLog = new List<EmailStatusLog>();
EmailStatusLog objEmailStatusLog = new EmailStatusLog();
foreach (var emailItem in lstEmailReceipent)
{
EMailDBContext _ctx = new EMailDBContext();
objEmailStatusLog.EmailId = emailItem.stEmailAdd;
objEmailStatusLog.Investor_Code = emailItem.stInvestor_code;
objEmailStatusLog.Date = DateTime.Now.ToString("MM/dd/yyyy");
objEmailStatusLog.ReportName = reportName;
objEmailStatusLog.ExportStatus = IsSuccess;
objEmailStatusLog.EmailSendStatus = false;
objEmailStatusLog.IsActive = true;
_ctx.emailStatusLogs.Add(objEmailStatusLog);
_ctx.SaveChanges();
//StatusLogHub objStatusLogHub = new StatusLogHub();
//objStatusLogHub.SendExportStatus();
}
}
Controller :
public ActionResult GetExportStatus()
{
EmailStatusLogRepository objEmailStatusRepository = new EmailStatusLogRepository();
return PartialView("_exportedReportList", objEmailStatusRepository.GetExportStatus());
}
Javascript:
<script type="text/javascript" language="javascript">
//==================signalR
$(function() {
var hub = $.connection.statusLog;
hub.client.updateStatus = function() {
getExportStatus()
};
$.connection.hub.start().done(function() {
alert("connection started");
// hub.server.sendExportStatus($('').val());
getExportStatus();
}).fail(function (e) {
alert(e);
});
});
function getExportStatus() {
var tbl = $('#statusTable');
$.ajax({
url: '@Url.Action("GetExportStatus")',
contentType: 'application/html ; charset:utf-8',
type: 'GET',
dataType: 'html'
}).success(function (result) {
tbl.empty().append(result);
}).error(function() {
});
}
Sen istemci komut dosyası ve göbek sınıf yöntemini değiştirmek gerekir
Teşekkür @Rahul ama istemci tarafında bu hatayı alıyorum şu yöntemle de tanımlanmamış malı 'sendExportStatus' okunamadı: .connection.hub.start(). done (function() { hub.server.sendExportStatus(); }) başarısız (işlev (e) { uyarısı (e); }); }); – moinulmithu
Sanırım hub oluşturulmadı. yapılandırmada –
kontrol edin javascript'te bir istisna vardır: hub undefind – moinulmithu