我有一个带有母版页的Web应用程序,我需要向我的应用程序的所有连接用户显示警报。我使用了Owin启动类并映射了信号R
然后创建了一个像下面这样的集线器
namespace ArtWebApp
{
[HubName("artHub")]
public class ArtWebHub : Hub
{
public void Hello()
{
Clients.All.hello();
}
public void SayMessage()
{
this.Clients.All.showmessage();
}
}
}
然后在主页中我添加了如下的Javascript
<script src="Scripts/jquery-1.6.4.js"></script>
<script src="Scripts/jquery.signalR-2.2.1.js"></script>
<script type="text/javascript">
$(function () {
debugger;
var connection = $.hubConnection("")
var hub = connection.createHubProxy('artHub');
hub.on('showmessage', function () {
alert('Hi');
});
connection.start().done();
//connection.start(function () {
// hub.invoke('SayMessage');
//});
});
</script>
当从同一页面调用Hub方法但是当我尝试从按钮点击页面调用该方法时它无法正常工作
protected void Button1_Click(object sender, EventArgs e)
{ var hubContext = GlobalHost.ConnectionManager.GetHubContext<ArtWebApp.ArtWebHub>();
hubContext.Clients.All.SayMessage();
}
有人可以向我提出这个问题吗
答案 0 :(得分:4)
我从你的代码中看到的是你正在调用的客户端函数的错误。
Clients.All
通常允许您通过调用Clients.All.functionName()
来调用您在客户端定义的函数
在Button1_Click
活动中,请更改
hubContext.Clients.All.SayMessage();
要
hubContext.Clients.All.showMessage();
这是因为您使用的是dynamic
集合Clients
您正在尝试调用客户端功能(不存在)。
您尝试调用的SayMessage方法是ArtWebHub类的成员,无法通过调用hubContext.Clients.All
来调用。
您可以使用SayMessage
从客户端调用hub.invoke('SayMessage')
但是要调用客户端中定义的showmessage
函数,您必须以不同于服务器的方式调用它,因为{{1} } SayMessage
无法使用