c# - SignalR 未收到消息 AspNet
问题描述
我正在尝试在两个不同的相同网页之间接收消息,以便它们上的 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 中工作的演示代码,我将不胜感激。我发现的所有例子都不起作用
解决方案
您应该像这样创建您的客户端:
在要使用 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();
});
推荐阅读
- c# - C#分页问题
- javascript - 如何为android webview实现@JavascriptInterface
- assembly - 条件跳转未按 NASM 的预期工作
- javascript - 使用谷歌应用脚本在电子表格中滚动到今天的日期
- powershell - 在 PowerShell 中重用正在运行的 PuTTY 代理(选美)
- python - 有没有办法在python中加快这个速度?
- java - EclipseLink 是否有类似 Hibernate Interceptors 的功能?
- ios - 在 iOS 上阅读保修到期日期
- r - 如何从 dbconnect 数据库加速 collect()
- c# - dbConn.Open 里面使用