Справочная информация:
Я хотел бы подключиться к своему хабу SignalR с помощью форм Xamarin для передачи через веб-сокет SignalR.
Моя настройка:
-> Концентратор SignalR находится на виртуальной машине Windows.Я подключаюсь к виртуальной машине с помощью симулятора iphone на Mac.
-> Я создал правило обратного прокси-сервера на iis для моего собственного хост-центра SignalR.
-> Я добавил записьв мой файл hosts для подключения к концентратору.
Что идет не так?
Я могу успешно подключиться к концентратору, однако проблема заключается в том, что транспортвсегда установлен на отправленные сервером события.Это должно быть использование транспорта WebSocket.
Что я пробовал?
Я создал веб-клиент и смог его успешно запустить, первоначально подключившись по httpзапросите, и после согласования сообщение будет обновлено до WebSocket.
Разница между этими двумя соединениями в том, что они используют поддержку Javascript и Websocket в браузере, где в качестве форм Xamarin используется пакет nuget AspNetCore.SingalR.Client.
На Xamarin я понимаю, что сначала соединение попытается соединиться через WebSocket, затем запрос на отправку сервером и, если предыдущие два не пройдут длительный опрос.Но насколько я понимаю, Mono теперь может поддерживать websocket.
Код подключения клиента Xamarin (быстрое написание, чтобы проверить, что транспорт WebSocket работает на формах Xamarin):
public class PriceStream
{
readonly HubConnection connection;
public PriceStream()
{
connection = new HubConnectionBuilder()
.WithUrl("https://dev.prices:5001/priceHub")
.Build();
connection.On<TestObject>("ReceiveMessage", (data) =>
{
var priceUpdate = new PriceUpdateMessage
{
ProductId = data.ProductId,
PriceId = data.PriceId,
Price = data.Price
};
// update price on app
// TODO
});
}
public async Task SubscribeAsync(int productId)
{
// connecting here because I want to see the transprot before sending message
await connection.StartAsync();
await connection.SendCoreAsync("SendMessage", new[] { productId });
}
}
Итакчто мне не хватает, что он не может подключиться с помощью транспорта WebSocket?