C# 信号器:第一次用户,无法获取';服务器按钮事件';至';集线器';至';客户';工作

C# 信号器:第一次用户,无法获取';服务器按钮事件';至';集线器';至';客户';工作,c#,asp.net,webforms,signalr,C#,Asp.net,Webforms,Signalr,嘿,伙计们,我是第一次尝试siqnalr,在让它工作时遇到了一些问题 我可以让客户端调用hub方法,而不会出现任何问题。 我可以让中心给客户打电话,没有问题。 但是我想从服务器端的按钮点击事件调用中心,这样我就可以用处理信息更新客户端,但是无论我怎么做,我都无法让它工作 有人有什么想法吗 我可能错过了一些简单的事情,但我不知道是什么错了 这是我的密码: Global.asax protected void Application_Start(object sender, EventArgs e)

嘿,伙计们,我是第一次尝试siqnalr,在让它工作时遇到了一些问题

我可以让客户端调用hub方法,而不会出现任何问题。 我可以让中心给客户打电话,没有问题。 但是我想从服务器端的按钮点击事件调用中心,这样我就可以用处理信息更新客户端,但是无论我怎么做,我都无法让它工作

有人有什么想法吗

我可能错过了一些简单的事情,但我不知道是什么错了

这是我的密码:

Global.asax

protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapHubs();
    }
TestHub.cs

  using System;
  using System.Linq;
  using Microsoft.AspNet.SignalR;

    namespace Hubs
    {

        /// <summary>
        /// Summary description for TestHub
        /// </summary>
        public class TestHub : Hub
        {

            public void Send(string name, string message)
            {
                // Call the broadcastMessage method to update clients.
                Clients.Caller.broadcastMessage(name, message);
            }


            internal static void Send2(string name, string message)
            {

                //test 1
                IHubContext context = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
                context.Clients.All.Send(name, message);

                //test 2
                IHubContext context2 = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
                context2.Clients.All.broadcastMessage(name, message);

            }

        }

    }
使用系统;
使用System.Linq;
使用Microsoft.AspNet.signal;
命名空间集线器
{
/// 
///TestHub的摘要说明
/// 
公共类TestHub:Hub
{
公共无效发送(字符串名称、字符串消息)
{
//调用broadcastMessage方法来更新客户端。
Clients.Caller.broadcastMessage(名称、消息);
}
内部静态void Send2(字符串名称、字符串消息)
{
//测试1
IHubContext context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.Send(名称、消息);
//测试2
IHubContext context2=GlobalHost.ConnectionManager.GetHubContext();
context2.Clients.All.broadcastMessage(名称、消息);
}
}
}
default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="Signalr2._default" %>

<!DOCTYPE html>


<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

        <telerik:RadScriptManager ID="RadScriptManager1" Runat="server">
            <Scripts>

                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />     

                <asp:ScriptReference Path="~/Scripts/jquery.signalR-1.1.2.js"/> 
                <asp:ScriptReference Path="~/signalr/hubs"  />  

            </Scripts>
        </telerik:RadScriptManager>

        <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">

            <script type="text/javascript">

                $(function ()
                {
                    // Declare a proxy to reference the hub. 
                    var ifiHub = $.connection.testHub;

                    // Create a function that the hub can call to broadcast messages.
                    ifiHub.client.broadcastMessage = function (name, message)
                    {

                        // Html encode display name and message. 
                        var encodedName = $('<div />').text(name).html();
                        var encodedMsg = $('<div />').text(message).html();

                        // Add the message to the page. 
                        $('#discussion').append('<li><strong>' + encodedName + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
                    };

                    //Start the connection.
                    $.connection.hub.start().done(function ()
                    {
                        ifiHub.server.send('connection started:', $.connection.hub.id);
                    });
                });

            </script>

        </telerik:RadScriptBlock>

        <asp:Button ID="Button1" runat="server" Text="Server To Client Test" OnClick="Button1_Click" />
        <br /><br />
        <ul id="discussion"/>


    </form>
</body>
</html>

$(函数()
{
//声明代理以引用中心。
var ifiHub=$.connection.testHub;
//创建一个中心可以调用以广播消息的函数。
ifiHub.client.broadcastMessage=函数(名称、消息)
{
//Html编码显示名称和消息。
var encodedName=$('').text(name).html();
var encodedMsg=$('').text(message.html();
//将消息添加到页面。
$(“#讨论”)。追加(“
  • ”+encodedName+”:“+encodedMsg+”
  • ); }; //启动连接。 $.connection.hub.start().done(函数() { ifiHub.server.send('连接已启动:',$.connection.hub.id); }); });

    default.aspx.cs

    using System;
    using System.Linq;
    using Hubs;
    using Microsoft.AspNet.SignalR;
    
    namespace Signalr2
    {
        public partial class _default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
    
                //test 1
                IHubContext context = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
                context.Clients.All.broadcastMessage("Now", DateTime.Now.ToString());
    
                //test 2
                IHubContext context2 = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
                context2.Clients.All.Send("Now", DateTime.Now.ToString());
    
                //test 3
                TestHub.Send2("Now", DateTime.Now.ToString());
    
                string test = "";
    
            }
        }
    }
    
    使用系统;
    使用System.Linq;
    使用集线器;
    使用Microsoft.AspNet.signal;
    名称空间信号2
    {
    公共部分类\u默认值:System.Web.UI.Page
    {
    受保护的无效页面加载(对象发送方、事件参数e)
    {
    }
    受保护的无效按钮1\u单击(对象发送者,事件参数e)
    {
    //测试1
    IHubContext context=GlobalHost.ConnectionManager.GetHubContext();
    context.Clients.All.broadcastMessage(“Now”,DateTime.Now.ToString());
    //测试2
    IHubContext context2=GlobalHost.ConnectionManager.GetHubContext();
    context2.Clients.All.Send(“Now”,DateTime.Now.ToString());
    //测试3
    Send2(“Now”,DateTime.Now.ToString());
    字符串测试=”;
    }
    }
    }
    
    要从客户端调用的集线器上的方法需要是公共的-尝试将Send2从内部切换到公共-

    您是否希望单击按钮的用户收到此消息?如果在同一页面上打开两个浏览器,而只有一个单击按钮,会发生什么情况?