我目前是一名学生,正在为我的学校做迷你项目。我完全是signalR的新手。请帮帮我。
我正在尝试从数据库中获取计数并将其返回并发送给调用该方法/函数的客户端。然后客户端将显示在网页中。
启动
using Microsoft.Owin;
using Owin;
using mini_project;
namespace mini_project
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
集线器
public class queryHub : Hub
{
private static mpDBEntities db = new mpDBEntities();
private int noG { get; set; }
public void GetStatusG()
{
var x = db.Database.ExecuteSqlCommand("select COUNT(Room_Status.Status) from Room_Cur_Status, Room_Status where Room_Status_Id = Room_Status.Id AND Room_Status.Status = 'G'");
//var x = db.Room_Cur_Status
// .Where(o => o.Room_Status.Status.Equals('G'))
// .Select(o => o.Room_Status.Status)
// .Count();
Clients.All.getG(x);
}
}
客户代码
<script>
var chat;
var noG;
$(document).ready(function () {
chat = $.connection.queryHub;
function Test() {
noG = chat.client.getG;
}
$.connection.hub.start()
.done(function () {
console.log('connected');
Test();
console.log('Got It');
document.getElementById('test1').innerHTML = noG
})
.fail(function (ex) {
console.log('not connected' + ex);
});
});
</script>
</head>
<body>
<div>
<p id="test1"></p>
</div>
</body>
</html>
答案 0 :(得分:0)
您需要在集线器的getG
处理程序中定义document.ready
功能,如此
chat.client.getG = function(x) {
alert("I have received a value, here it is..." + x);
};
此外,您可能无法在任何地方调用Hub
方法,我通常希望提供HubMethodName
属性
[HubMethodName("GetStatusG")]
public void GetStatusG()
{
var x = db.Database.ExecuteSqlCommand("select COUNT(Room_Status.Status) from Room_Cur_Status, Room_Status where Room_Status_Id = Room_Status.Id AND Room_Status.Status = 'G'");
//var x = db.Room_Cur_Status
// .Where(o => o.Room_Status.Status.Equals('G'))
// .Select(o => o.Room_Status.Status)
// .Count();
Clients.All.getG(x);
}
此外,我没有在您的客户端代码中看到您调用Hub
方法的任何位置。试试这个
<input type="button" id="update" value="Update" />
然后处理它
$(“#update”)。click(function(){ chat.server.GetStatusG(); });
因此您的客户端代码变为
<html>
<head>
<script>
var chat;
var noG;
$(document).ready(function () {
chat = $.connection.queryHub;
chat.client.getG = function (x) {;
$("#test1").html("Hey I received a new value of x... " + x);
}
$("#update").click(function () {
chat.server.GetStatusG();
});
$.connection.hub.start()
.done(function () {
console.log('connected');
Test();
console.log('Got It');
})
.fail(function (ex) {
console.log('not connected' + ex);
});
});
</script>
</head>
<body>
<div>
<input type="button" id="update" value="Update" />
<p id="test1"></p>
</div>
</body>
</html>
Here is the Damien Edward's MoveShape
example that works on the new version of SignalR