Xamarin формы: AspNetCore.SignalR.Client v1.0.3, транспорт веб-сокета не работает - PullRequest
0 голосов
/ 28 сентября 2018

Справочная информация:

Я хотел бы подключиться к своему хабу 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?

...