Как передать данные клиентам из центра SignalR в C # - PullRequest
0 голосов
/ 19 апреля 2019

Я использую код из примера MS:

        public Task PushMessage(string Message)
        {
            var T = Clients.All.SendAsync(Message);
            Console.WriteLine("I'm here");
            return T;
        }

, но вызов письменной записи никогда не достигается.Так что мне нужно проверить, что по крайней мере один клиент подключен, прежде чем отправлять сообщения?

я пытаюсь добиться следующего: у меня создается много небольших сообщений, которые нужно отправить клиентамподключен к концентратору, если есть.поэтому сообщения создаются независимо от того, что и если клиенты подключены, они должны получить его.

прямо сейчас, я поместил вызов SendMessage в событие, которое генерируется, когда создаются новые данные, но этопросто приводит к удержанию обратного вызова, потому что SendMessage не возвращает.

Я ищу следующее: если есть клиенты, они получают сообщение, если нет клиентов, сообщение отбрасывается.

как мне этого добиться?

Я думаю, что я могу неправильно понять, как работает SignalR, и я действительно хотел бы найти пример C # <-> C #, потому что каждый отдельный пример в Интернете - это web /js centric.

1 Ответ

0 голосов
/ 19 апреля 2019

Просмотрите некоторые примеры кода для консольных приложений в их GitHub .

SignalR будет транслировать только при наличии соединений, которые будут транслироваться.Это часть этого, так что вам не нужно управлять этим аспектом.Вы, конечно, можете запрашивать данные или получать их по своему усмотрению, но когда вы скажете, что их нужно отправить, SignalR проверит, есть ли кто-нибудь, кому их нужно отправить.

Насколько C # to C # против C #web / js, да, вы думаете об этом неправильно.Если это консольное приложение или web / js, то это клиент.Связь клиент-сервер и сервер (концентратор) к клиенту.Не имеет значения, является ли это консольным приложением, или web / js, или любым другим типом клиента.

Вот пример консольного приложения, которое я использую для демонстрационных целей, которое позволяет мне общаться между консолью ивеб-страница или веб-страница для консоли через концентратор:

        private static void Main(string[] args)
    {
        try
        {

            var connection = new HubConnection("http://localhost:7132/");
            IHubProxy hub = connection.CreateHubProxy("ChatHub");

            hub.On<string, string>("broadcastMessage", (name, message) => { Console.Write(name + ": "); Console.WriteLine(message); });
            connection.Start().Wait();
            hub.Invoke("Notify", "Console app", connection.ConnectionId);
            string msg = null;

            while ((msg = Console.ReadLine()) != null)
            {
                hub.Invoke("Send", "Console app", msg).Wait();
            }

        }
        catch (Exception e)
        {
            Console.WriteLine("Error" + e.Message);
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...