2016-06-10 29 views
1

我目前是一名学生,想为我的学校做小型项目。我完全是signalR的新手。请帮帮我。检索计数声明并通过信号发送给客户R

我想从数据库中获取计数并将其返回并发送给调用该方法/函数的客户端。然后客户端将显示在网页上。

启动

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

您需要定义您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" /> 

再处理它

$( “#更新”)点击(函数(){ 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

+0

“$(文件)。就绪(函数(){ \t \t \t聊天= $ .connection.queryHub; \t \t \t $。 connection.hub.start() \t \t \t \t \t \t .do ne(function(){ \t \t \t \t \t \t \t console.log('connected'); \t \t \t \t \t \t \t \t \t \t \t \t \t}) \t \t \t \t \t .fail(功能(前){ \t \t \t \t \t \t控制台。日志('未连接'+ ex); \t \t \t \t \t}); \t \t \t chat.client.getG =函数(X){ \t \t \t \t的console.log(X); \t \t \t \t的document.getElementById( 'TEST1')的innerHTML = X \t \t \t}。 \t \t});?” 我说喜欢这一点,但它仍然没有工作 –

+0

是您的插座已经被正确建立连接你得到任何错误消息 – fahadash

+0

而且你在哪里你的服务器上调用GetStatusG()/ hub? – fahadash