Signalr .Net 客户端控制台应用程序仅从集线器接收消息一次

Signalr .Net Client Console application receive messages from hub only once

我在我的控制台应用程序中使用 Signalr .Net Client 来接收来自 Signalr Hub 的消息,Signalr Hub 是一个单独的 Web 应用程序。

我的控制台应用程序正确连接到集线器并且只从集线器接收消息一次。然后 Signalr .Net 客户端中的客户端方法没有被调用。

一旦我停止控制台应用程序并运行它,它再次只从集线器收到一次消息,没有任何反应。

这是我的 Hub 代码

public override Task OnConnected()
        {
            try
            {
                 var cType = Context.QueryString["type"];
                var connectionId = Context.ConnectionId;
                var connectedUserList = (from d in Users
                                         where d.ClientType == cType
                                                          select d).ToList();
                if (connectedUserList.Count > 0)
                {
                    var conUser = connectedUserList.First<ConnectedUsers>();
                    conUser.ConnectionIds.Add(connectionId);
                }
                else
                {
                    var newUser = new ConnectedUsers
                    {
                        ConnectionIds = new HashSet<string> {connectionId}
                       ,
                        ClientType = cType
                    };
                    Users.Add(newUser);
                }
            }
            catch (Exception ex)
            {

           ).Error(ex);
            }
            return base.OnConnected();
        }

和我的 .Net 客户端连接

static  void Main(string[] args)
        {

            SignalrHandler();
            Console.ReadLine();

        }

        public static async void SignalrHandler()
        {
            var url = ConfigurationSettings.AppSettings["Url"] ?? @"http://localhost:1010/";
            var querystringData = new Dictionary<string, string> { { "type", "WIN" } };
            _hubConnection = new HubConnection(url, querystringData);
            MarcolinMainProxy = _hubConnection.CreateHubProxy("MainHub");
            MarcolinMainProxy.On<string>("sendAlert", type => InvokeMethod(type));    
           await _hubConnection.Start();

        }

客户端方法

private static void InvokeMethod(string type)
        {
            Console.WriteLine(String.Format("Recieved Message From Server On :{0}",System.DateTime.Now.ToString()));
            Console.WriteLine("Message Received");

            Console.ReadLine();


        }

当我使用带有以下行的 Invoke 方法时会发生这种情况

MarcolinMainProxy.On<string>("sendAlert", type => InvokeMethod(type));

当我使用以下行时它有效..

MarcolinMainProxy.On<string>("sendAlert", stock => Console.WriteLine("Symbol {0} Price {1}", "sd", "sdde"));

检查以下内容link

https://damienbod.com/2013/11/13/signalr-messaging-a-complete-client-with-a-console-application/

您必须将密码更改为

MarcolinMainProxy.On<string>("sendAlert", InvokeMethod);