SignalR不接收邮件AspNet

时间:2018-08-10 07:20:13

标签: c# asp.net signalr

我正在尝试在两个不同的相同网页之间接收消息,以便两个页面上的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的演示代码,我将非常感激。我发现的所有示例均无效

2 个答案:

答案 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, "&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

答案 1 :(得分:-1)

在SignalHub中使用SendClient方法使用Clients.All.ReceiveMessage方法 我认为您应该使用Clients.All.Send方法(如果使用ASPNET核心,则应使用SendAsync)