SignalR在ASP.NET和控制台应用程序之间通信

时间:2018-08-09 20:05:28

标签: c# asp.net signalr

我是SignalR的新手,但是,我已经阅读了许多文档,因此无法正常工作。

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

我发送这样的消息:

 { ID: p_key, RequestedFields: p_page.dataIds, RequestedGrids: p_page.grids }

我希望它能正常工作,以便于:

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

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

客户端应用程序信息:

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

1 个答案:

答案 0 :(得分:3)

假设您的控制台服务器中有一个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