我正在尝试在两个不同的相同网页之间接收消息,以便两个页面上的asp:label都可以提供有关每个下拉列表中当前所选内容的信息。
网页代码
protected void Page_Load(object sender, EventArgs e)
{
IHubProxy _hub;
string url = @"http://localhost:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("Hub");
connection.Start().Wait();
_hub.On("ReceiveMessage", x => CurrentInfo.Text = x);
}
protected void SaveStates_Click(object sender, EventArgs e)
{
//Set the hubs URL for the connection
string url = "http://localhost:8080/signalr";
// Declare a proxy to reference the hub.
var connection = new HubConnection(url);
var _hub = connection.CreateHubProxy("Hub");
connection.Start().Wait();
_hub.Invoke("SendMessage", "Hello").Wait();
}
集线器代码
static void Main(string[] args)
{
string url = @"http://localhost:8080/";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine(string.Format("Server running at {0}", url));
Console.ReadLine();
}
}
[HubName("Hub")]
public class SignalHub : Hub
{
public void SendMessage(string message)
{
Console.WriteLine(message);
Clients.All.ReceiveMessage(message);
//TODO:
//Respond to Messages
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
当前正在发生什么?
目前,asp:label仅针对发送邮件的特定页面进行更新。并非两者兼有,在上面的代码中我做错了什么。
任何帮助将不胜感激。预先感谢
编辑
如果有人可以提供一些使用JS的演示代码,我将非常感激。我发现的所有示例均无效
答案 0 :(得分:0)
您应该这样创建客户:
在要使用signalr的html页面中引用signalr.js和chat.js。
<script src="~/lib/signalr/signalr.js"></script>
<script src="~/js/chat.js"></script>
chat.js的内容:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/hub").build();
connection.on("ReceiveMessage", function (user, message) {
var msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
var encodedMsg = user + " says " + msg;
var li = document.createElement("li");
li.textContent = encodedMsg;
document.getElementById("messagesList").appendChild(li);
});
connection.start().catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
答案 1 :(得分:-1)
在SignalHub中使用SendClient方法使用Clients.All.ReceiveMessage方法 我认为您应该使用Clients.All.Send方法(如果使用ASPNET核心,则应使用SendAsync)