Ошибка Unknown при подключении при создании соединения с помощью Ably.io - PullRequest
0 голосов
/ 10 сентября 2018

У нас есть случай использования, когда пользователь еще не вошел в приложение, и токен аутентификации не был создан.Приложению необходимо подключиться к веб-серверу по общедоступному каналу, чтобы проверить наличие обновлений приложения.Сбой соединения.Со следующей причиной ошибки: «Неизвестная ошибка; Код: 500; Код HttpStatus: (404) NotFound.

Библиотека Ably и SDK из Nuget 0.8.11.

Следующий код не подключаетсяна веб-сервер.

    public ExtendedAblyIoClient(string name, string ClientId, string ChannelId, string AuthUrl, string ablyKey)
    {
        _name = name;
        _authUrl = AuthUrl;
        _clientId = ClientId;
        _channelId = ChannelId;
        _ablyAppKey = ablyKey;
        _authUri = new Uri(_authUrl);  // local host for testing and development.
        _httpRequestTime = TimeSpan.FromHours(2.0);

        ClientOptions clientOptions = new ClientOptions
        {
            Key = _ablyAppKey,
            ClientId = _clientId,
            AuthUrl = _authUri,
            Tls = false,
            HttpRequestTimeout = _httpRequestTime,
            HttpOpenTimeout = _httpRequestTime
        };

        commonInitialization(clientOptions);
        _channel = _ablyClient.Channels.Get(_channelId);
        _channel.Subscribe(message =>
        {
            OnMessageCallback(_sender, _channelId, message.Data.ToString());
        });

    }

    private void commonInitialization(ClientOptions clientOptions)
    {
        _ablyClient = new AblyRealtime(clientOptions);

        _ablyClient.Connection.On(ConnectionState.Connected, args =>
        {
            realTimeClientOnConnected(_sender);
        });

        _ablyClient.Connection.On(ConnectionState.Disconnected, args =>
        {
            realTimeClientOnDisconnected(_sender);
        });
        _ablyClient.Connection.On(ConnectionState.Failed, args =>
        {
            string WhyError = _name + " Failed: " + _ablyClient.ToString();
            realTimeClientOnDisconnected(WhyError);
        });
    }

1 Ответ

0 голосов
/ 10 сентября 2018

404 будет из клиентской библиотеки, пытающейся связаться с указанным вами AuthUrl, и получит 404.

Из вашего вопроса звучит так, как будто вы ожидаете, что вам не придется проходить аутентификацию при подключении к «общедоступному каналу». Это не то, как работает Ably Auth; любой пользователь, подключающийся к вашему приложению, должен пройти аутентификацию, иметь токен или ключ API для подключения, что означает, что он должен быть аутентифицирован.

Если вы не хотите, чтобы они подключались к каким-либо каналам, которые не находятся в пространстве имен public: и имеют только возможности подписки на них, вы можете назначить токен с возможностями, установленными на {"public:*":["subscribe"]}. Но вам все равно нужно дать им маркер.

Прочтите https://www.ably.io/documentation/general/authentication для документации по модели аутентификации Ably и https://www.ably.io/documentation/realtime/authentication для аутентификации соединений в реальном времени.

Изменить: вы указали, что вы также передаете ключ. Клиент не может использовать оба - он либо соединяется с ключом, либо получает токен от authUrl и соединяется с ним - так что, вероятно, он просто игнорирует один из них. Удалите тот, который вы не хотите использовать.

Редактировать: Я бы также предложил удалить опции, отключающие Tls, изменить таймауты http и оставить их по умолчанию. Если у вас нет особых причин для отключения tls, мы настоятельно рекомендуем оставить его включенным по соображениям безопасности.

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