C# 信号器:第一次用户,无法获取';服务器按钮事件';至';集线器';至';客户';工作
嘿,伙计们,我是第一次尝试siqnalr,在让它工作时遇到了一些问题 我可以让客户端调用hub方法,而不会出现任何问题。 我可以让中心给客户打电话,没有问题。 但是我想从服务器端的按钮点击事件调用中心,这样我就可以用处理信息更新客户端,但是无论我怎么做,我都无法让它工作 有人有什么想法吗 我可能错过了一些简单的事情,但我不知道是什么错了 这是我的密码: Global.asaxC# 信号器:第一次用户,无法获取';服务器按钮事件';至';集线器';至';客户';工作,c#,asp.net,webforms,signalr,C#,Asp.net,Webforms,Signalr,嘿,伙计们,我是第一次尝试siqnalr,在让它工作时遇到了一些问题 我可以让客户端调用hub方法,而不会出现任何问题。 我可以让中心给客户打电话,没有问题。 但是我想从服务器端的按钮点击事件调用中心,这样我就可以用处理信息更新客户端,但是无论我怎么做,我都无法让它工作 有人有什么想法吗 我可能错过了一些简单的事情,但我不知道是什么错了 这是我的密码: Global.asax protected void Application_Start(object sender, EventArgs e)
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>: ' + 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从内部切换到公共-您是否希望单击按钮的用户收到此消息?如果在同一页面上打开两个浏览器,而只有一个单击按钮,会发生什么情况?