2 votes

L'application Signalr .Net Client Console reçoit les messages du concentrateur une seule fois.

J'utilise Signalr .Net Client dans mon application Console pour recevoir des messages du Signalr Hub qui est une application web séparée.

Mon application console se connecte correctement au concentrateur et ne reçoit que des messages du concentrateur. une fois . Ensuite, la méthode client dans le client Signalr .Net n'est pas appelée.

Une fois que j'arrête l'application console et que je l'exécute, elle reçoit à nouveau un message du concentrateur, une seule fois, et rien ne se passe.

Voici mon Code du moyeu

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();
        }

Et ma connexion client .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();

        }

Méthode du client

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();

        }

Et cela se produit lorsque j'utilise une méthode Invoke avec la ligne suivante

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

Et quand j'utilise la ligne suivante, cela fonctionne

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

1voto

Haitham Shaddad Points 3134

Consultez le lien suivant

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

Vous devez modifier votre code pour

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X