Создайте прокси-сервер с помощью SignalR

#c# #signalr #console-application

#c# #signalr #консольное приложение

Вопрос:

Я работаю над веб-сайтом SignalR и консольным приложением SignalR client, которое подключается к серверу SignalR, но у меня возникли некоторые проблемы с подключением.

Я заметил в некоторых руководствах и других разделах, что они используют метод «CreateProxy», но у меня нет этого метода, я также не могу найти его в браузере объектов.

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

Код:

   Connection = new HubConnection(GetUrl());

        while (Connection.State != ConnectionState.Connected)
        {
            var connectionTask = Connection.Start().ContinueWith(task =>
            {
                if (Connection.State == ConnectionState.Connected)
                {
                    Console.WriteLine("Succesvol verbonden!");

                    // Subscribe to receive messages
                    Connection.Received  = Connection_Received;
                }
                else
                {
                    Console.WriteLine("Het is niet gelukt om te verbinden!");
                }

            });

            // Wait till outcome
            connectionTask.Wait();

            // Check if we are succesfully connected
            if (Connection.State != ConnectionState.Connected)
            {
                Connection = new Connection(GetUrl());
            }
            else
            {
                // Send a message
                Connection.Send("Hallooo!").ContinueWith(sendTask =>
                {
                    if (connectionTask.IsFaulted)
                    {
                        Console.WriteLine("Het is niet gelukt om een bericht te versturen!");
                    }
                });
            }
        }
 

Ответ №1:

Я предполагаю, что ваше свойство Connection относится не к типу HubConnection, а к типу Connection или IConnection, может быть?

В этом случае вам следует сначала преобразовать соединение обратно в тип HubConnection, чтобы иметь возможность использовать CreateHubProxy():

         Connection = new HubConnection(GetUrl());
        var hubProxy = ((HubConnection) Connection).CreateHubProxy("YourHubName");
 

Комментарии:

1. Спасибо! Совершенно забыл, что я использовал Connection вместо HubConnection.

2. Это не цельный дизайн, если ваш код требует подкласса Connection, вы должны убедиться, что это то, что у вас есть. Приведение ссылки к подклассу опасно. Кто-то может изменить фактическую ссылку на что-то другое, и код будет прерываться первым во время выполнения

3. Верно, Андерс, но поскольку это пример, он показывает, где находится метод CreateHubProxy. Это действительно небезопасно для производства.