Ich entwickle eine Anwendung in asp.net mvc 5. In diesem Projekt benutze ich signalR, um die aktualisierten Daten in Echtzeit anzuzeigen. Das bedeutet, wenn sich Daten ändern, werden sie in der Anwendungsoberfläche geladen. Aber leider wird es nicht automatisch geladen, wenn ich die Seite nicht aktualisiere.SignalR Datenbank Update Benachrichtigung
Hier ist mein Code unten:
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() {
});
}
Dank @Rahul aber ich diesen Fehler von Client-Seite bekommen: Uncaught Typeerror: kann Eigenschaft 'sendExportStatus' undefinierten bei folgenden Methode lesen: .connection.hub.start(). done (function() { hub.server.sendExportStatus(); }). Fail (Funktion (e) { Alarm (e); }); }); – moinulmithu
Ich denke Hub wurde nicht erstellt. Also Check-in Konfiguration –
Es gibt eine Ausnahme in Javascript: Hub ist undefind – moinulmithu