从后面的代码调用SignalR Hub方法

时间:2017-02-18 09:14:37

标签: asp.net webforms signalr

我有一个带有母版页的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();    
    }

有人可以向我提出这个问题吗

1 个答案:

答案 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无法使用