【问题标题】:SignalR Communicate between asp.net and Console ApplicationSignalR 在 asp.net 和控制台应用程序之间进行通信
【发布时间】:2018-08-09 20:05:28
【问题描述】:

我对 SignalR 比较陌生,但是,我已经阅读了大量文档,但无法使其正常工作。

我有一个在 SignalR 中工作的完全可用的集线器,它被实现为控制台应用程序。我还有一个客户端作为另一个控制台应用程序工作。但是,我还希望能够从 asp.net 应用程序向服务器发送消息。

我这样发送消息:

_hub.Invoke("SendMessage", "ExampleMessage").Wait();

我希望它能够在以下位置工作:

<asp:button onclick="Signalr_FireEvent"> (Not Real Code)

它会发送一条类似于顶部的消息。

客户申请信息:

IHubProxy _hub;
string url = @"http://localhost:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("Hub");
connection.Start().Wait();
_hub.On("ReceiveMessage", x => Console.WriteLine(x)); //On Receive Message Write To Console

_hub.Invoke("SendMessage", "$").Wait(); //Send LoggedIn Message once connected to server

string line = null;
while ((line = System.Console.ReadLine()) != null)
{
    _hub.Invoke("SendMessage", line).Wait();
}
Console.Read();

【问题讨论】:

  • 它的概念完全一样(虽然 TBH 可能让客户端浏览器连接比服务器更有意义...)您尝试了什么,什么没有奏效?
  • 我尝试使用 asp:button 的 onclick 代码进行此操作,但是我从未在集线器上收到任何连接或网络浏览器上的错误消息,所以我认为我做错了由于他们没有这方面的文件,我决定在这里问
  • 您仍然需要更具体。您尝试了哪些代码不起作用?您是否设置了一些断点并逐步执行?检查输出日志中的异常?如果没有更多信息,我们将无能为力。
  • 好的,对不起,我会在早上在电话 ATM 上发布一些代码。非常感谢您迄今为止的帮助
  • 我的建议是你有一个中心作为中心,然后控制台应用程序和页面(通常是 JavaScript)都作为客户端工作。您可以通过集线器轻松地在客户端之间转发消息。

标签: c# asp.net signalr


【解决方案1】:

假设您的控制台服务器中有一个 Hub 类,例如:

public class MyHub : Hub
{
    public void SendMessage(string message)
    {
        Console.WriteLine("Incoming message {0}", message);
    }
}

您可以通过 javascript 从客户端 Web 应用程序访问服务器:

<form runat="server">
    <div>
        <input type="button" id="sendmessage" value="Send from javascript" />
        <asp:Button ID="Button1" runat="server" Text="Send from code behind" OnClick="Button1_Click" />
    </div>
</form>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-1.6.4.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.3.0.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="http://localhost:8080/signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
    $(function () {
        //Set the hubs URL for the connection
        $.connection.hub.url = "http://localhost:8080/signalr";

        // Declare a proxy to reference the hub.
        var _hub = $.connection.myHub;

        // Start the connection.
        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {
                // Call the SendMessage method on the hub.
                _hub.server.sendMessage("$");
            });
        });
    });
</script>

或后面的代码:

protected void Button1_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("MyHub");

    connection.Start().Wait();

    _hub.Invoke("SendMessage", "$").Wait();
}

请注意,您需要在 Web 应用程序中安装以下软件包:

安装包 Microsoft.AspNet.SignalR.JS

安装包 Microsoft.AspNet.SignalR.Client

作为完整参考,请阅读我的回答所依据的https://docs.microsoft.com/en-us/aspnet/signalr/overview/deployment/tutorial-signalr-self-host

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多