检索计数语句并通过 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