#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. Это действительно небезопасно для производства.