首页 > 解决方案 > 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 中工作的演示代码,我将不胜感激。我发现的所有例子都不起作用

标签: c#asp.netsignalr

解决方案


您应该像这样创建您的客户端:

在要使用 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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    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();
});

来源:https ://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-2.1&tabs=visual-studio


推荐阅读