我知道有很多关于SignalR的例子,但我似乎无法让它工作,我希望你们中的一个人能够(完整地)显示一个WebPage(线程循环如此)我们可以看到它一遍又一遍地发生)可以在页面上调用JS方法并更改文本标签或创建弹出窗口,或者只是为了让我们看到方法执行?
我会给你我的代码,也许你可以指出错误,但是没有客户首先发出请求的Server->客户端调用的任何基本示例都会很棒!
集线器:
[HubName("chat")]
public class Chat : Hub
{
public void Send(string message)
{
// Call the addMessage method on all clients?
Clients.addMessage(message);
}
}
调用(线程)方法:
private void DoIt()
{
int i = 0;
while (true)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<Chat>();
hubContext.Clients.addMessage("Doing it... " + i);
i++;
Thread.Sleep(500);
}
}
JS:
$(function () {
// Proxy created on the fly
var chat = $.connection.chat;
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
confirm("Are you having fun?");
confirm(message);
};
// Start the connection
$.connection.hub.start();
});
答案 0 :(得分:2)
我遇到的问题是一个自动关闭的JS导入标记,它停止了正在运行的页面上的所有JS ...
对于遇到相同问题的其他人,这是我在服务器上的工作示例,将数据推送到所有客户端,而无需客户端提示:
使用Javascript:
$(function () {
// Proxy created on the fly
var chat = $.connection.chat;
// Declare a function so the hub can invoke it
chat.addMessage = function (message) {
document.getElementById('lblQuestion').innerHTML = message;
};
// Start the connection
$.connection.hub.start();
});
HTML:
<h2 id="lblQuestion" runat="server">Please wait for a question...</h2>
集线器:
[HubName("chat")]
public class Chat : Hub
{
public void Send(string message)
{
// Call the addMessage method on all clients
Clients.addMessage(message);
}
public void Broadcast(string message)
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<Chat>();
context.Clients.addMessage(message);
}
}
致电客户:
private void DoIt()
{
int i = 0;
while (true)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<Chat>();
hubContext.Clients.addMessage("Doing it... " + i);
i++;
Thread.Sleep(500);
}
}
对DoIt()的线程调用:
var thread = new Thread(new ThreadStart(DoIt));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();