2016-03-20 37 views
0

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

cevap

0

.

[HubName("statusLog")] 
public class StatusLogHub : Hub 
{ 

    [HubMethodName("sendExportStatus")] 
    public void SendExportStatus() 
    { 
     IHubContext context = GlobalHost.ConnectionManager.GetHubContext<StatusLogHub>(); 
     EmailStatusLogRepository el = new EmailStatusLogRepository(); 
       Clients.All.updateStatus(el.GetExportStatus()); 
    } 
} 

Ve istemci tarafında: Çapraz etki alanı için aşağıdaki linki başvurabilir

$(function() 
     { 
      var hub = $.connection.statusLog; 
      hub.client.updateStatus = function(data) { 
//data contain all the data from repository this will call every time as repository updated 
       getExportStatus(data) 
      }; 
    $.connection.hub.start().done(function() { 
       //alert("connection started"); 
       hub.server.sendExportStatus(); 
      }).fail(function(e) { 
       alert(e); 
      }); 
     }); 


function getExportStatus(data) 
     { 
alert(data); 
      //you can put here logic for getting data on html. 
    } 
} 

o göbek tümü müşterilerin veri göndermek böylece göbek yöntemde Eğer argüman olarak GetExportStatus yöntemini kullanmak gerekir: enter link description here

+0

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

+0

Sanırım hub oluşturulmadı. yapılandırmada –

+0

kontrol edin javascript'te bir istisna vardır: hub undefind – moinulmithu

0

istemci komut dosyası deneyebilirsiniz olarak:

$(function() 
     { 
      var hubstatusLog = $.connection.statusLog; 
      hubstatusLog.client.updateStatus = function(data) { 
//data contain all the data from repository this will call every time as repository updated 
       getExportStatus(data) 
      }; 
    $.connection.hub.start(function() { 
hubstatusLog.server.sendExportStatus(); 
}); 
}); 

function getExportStatus(data) 
     { 
alert(data); 
      //you can put here logic for getting data on html. 
    } 

sunucusuna merkez: Yakalanmayan TypeError:

[HubName("statusLog")] 
public class StatusLogHub : Hub 
{ 

    [HubMethodName("sendExportStatus")] 
    public void SendExportStatus() 
    { 
     IHubContext context = GlobalHost.ConnectionManager.GetHubContext<StatusLogHub>(); 
     EmailStatusLogRepository el = new EmailStatusLogRepository(); 
       Clients.All.updateStatus(el.GetExportStatus()); 
    } 
} 
+0

Teşekkürler @Rahul. Ama aslında proxy üretmeden hub kullanmalıyım. Bu konuda herhangi bir öneride bulunabilir misiniz? – moinulmithu

+0

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#genproxy bağlantısını inceleyebilirsiniz. –