SignalR Hub 方法映射 mvc 5 服务器端方法
SignalR Hub method mapping mvc 5 serverside method
我正在开发一个 asp.net mvc 5 应用程序,我需要在其中使用 signalR。我已经创建了集线器,并且能够连接到集线器。现在我面临的主要问题是如何将服务器端方法映射到集线器。我是 signalR 的新手,如果有什么可以帮助我的,那对我来说将是一个很大的帮助。这是我的代码:
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
{
EMailDBContext _ctx = new EMailDBContext();
//I need to show this lstEmailStatus list in real time.
public IEnumerable<EmailStatusLog> GetExportStatus()
{
var lstEmailStatus = _ctx.emailStatusLogs.Where(x => x.IsActive == true && x.Date == DateTime.Now.ToString()).ToList();
return lstEmailStatus;
}
}
Controller :
public ActionResult GetExportStatus()
{
EmailStatusLogRepository objEmailStatusRepository = new EmailStatusLogRepository();
return PartialView("_exportedReportList", objEmailStatusRepository.GetExportStatus());
}
View:
$("#btnExportStatus").click(function () {
$.ajax({
url: '@Url.Action("GetExportStatus")',
contentType: 'application/html ; charset:utf-8',
type: 'GET',
dataType: 'html'
}).success(function () {
var connection = $.hubConnection();
var hub = connection.createHubProxy("statusLog");
hub.on("updateStatus", function (statusUpdated) {
$('#hitCountValue').text(statusUpdated);
});
});
// Declare a proxy to reference the hub.
});
function getExportStatus() {
var tbl = $('#statusTable');
$(function (result) {
tbl.empty().append(result);
}).error(function () {
});
};
假设你想在你的 CreateHubConnection
服务器端方法中创建一个集线器连接,那么你应该做这样的事情-
public void CreateHubConnection()
{
StatusLogHub hub = new StatusLogHub ();
hub.SendExportStatus();
}
现在在你的 hub 方法中做任何你想做的事。希望对您有所帮助。
编辑
在您的客户端-
首先添加所有 SignalR 库,如-
<script src="Scripts/jquery-1.6.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="signalr/hubs"></script>
然后创建连接并调用客户端方法-
<script type="text/javascript">
$(function () {
var log = $.connection.statusLog;
$.connection.hub.start();
//here we are calling the hub client method
log.client.updateStatus = function () {
//do whatever you want to
};
});
</script>
我正在开发一个 asp.net mvc 5 应用程序,我需要在其中使用 signalR。我已经创建了集线器,并且能够连接到集线器。现在我面临的主要问题是如何将服务器端方法映射到集线器。我是 signalR 的新手,如果有什么可以帮助我的,那对我来说将是一个很大的帮助。这是我的代码:
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
{
EMailDBContext _ctx = new EMailDBContext();
//I need to show this lstEmailStatus list in real time.
public IEnumerable<EmailStatusLog> GetExportStatus()
{
var lstEmailStatus = _ctx.emailStatusLogs.Where(x => x.IsActive == true && x.Date == DateTime.Now.ToString()).ToList();
return lstEmailStatus;
}
}
Controller :
public ActionResult GetExportStatus()
{
EmailStatusLogRepository objEmailStatusRepository = new EmailStatusLogRepository();
return PartialView("_exportedReportList", objEmailStatusRepository.GetExportStatus());
}
View:
$("#btnExportStatus").click(function () {
$.ajax({
url: '@Url.Action("GetExportStatus")',
contentType: 'application/html ; charset:utf-8',
type: 'GET',
dataType: 'html'
}).success(function () {
var connection = $.hubConnection();
var hub = connection.createHubProxy("statusLog");
hub.on("updateStatus", function (statusUpdated) {
$('#hitCountValue').text(statusUpdated);
});
});
// Declare a proxy to reference the hub.
});
function getExportStatus() {
var tbl = $('#statusTable');
$(function (result) {
tbl.empty().append(result);
}).error(function () {
});
};
假设你想在你的 CreateHubConnection
服务器端方法中创建一个集线器连接,那么你应该做这样的事情-
public void CreateHubConnection()
{
StatusLogHub hub = new StatusLogHub ();
hub.SendExportStatus();
}
现在在你的 hub 方法中做任何你想做的事。希望对您有所帮助。
编辑
在您的客户端-
首先添加所有 SignalR 库,如-
<script src="Scripts/jquery-1.6.4.min.js"></script> <script src="Scripts/jquery.signalR-2.2.0.min.js"></script> <script src="signalr/hubs"></script>
然后创建连接并调用客户端方法-
<script type="text/javascript"> $(function () { var log = $.connection.statusLog; $.connection.hub.start(); //here we are calling the hub client method log.client.updateStatus = function () { //do whatever you want to }; }); </script>