检索计数语句并通过 signalR 发送给客户端
Retrieving a count statement and send to client through signalR
我目前是一名学生,正在尝试为我的学校做一些小项目。我完全是 signalR 的新手。请帮助我。
我正在尝试从数据库中获取一个计数 return 并将其发送给调用该 method/function 的客户端。然后客户端将显示在网页中。
启动
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>
您需要像这样在集线器的 document.ready
处理程序中定义 getG
函数
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(函数(){
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
我目前是一名学生,正在尝试为我的学校做一些小项目。我完全是 signalR 的新手。请帮助我。
我正在尝试从数据库中获取一个计数 return 并将其发送给调用该 method/function 的客户端。然后客户端将显示在网页中。
启动
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>
您需要像这样在集线器的 document.ready
处理程序中定义 getG
函数
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(函数(){ 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