Как использовать потоковую передачу Firebase REST с гамаком в Windows Phone 8?

#c# #rest #windows-phone-8 #firebase #nest-api

#c# #rest #windows-phone-8 #firebase #nest-api

Вопрос:

Я работаю с API Nest, который поддерживает потоковую передачу REST через Firebase. У меня работает REST, однако я не могу заставить его правильно транслировать. Это очень важно для моего приложения, а REST просто неэффективен для того, что я хочу сделать.

Я использую Hammock для запросов, и вот код:

 public class NestAPI
{
    private RestClient client { get; set; }

    public NestAPI()
    {
        this.client = new RestClient();
        this.client.Authority = "https://developer-api.nest.com/";
        this.client.HasElevatedPermissions = true;
    }

    public void BeginStreaming()
    {
        RestRequest request = new RestRequest();
        request.AddParameter("auth", App.accessToken);
        request.RetryPolicy = new RetryPolicy() { RetryCount = 3 };
        //Enables streaming
        //request.AddHeader("Accept", "text/event-stream");
        //request.StreamOptions = new StreamOptions() { Duration = new TimeSpan(96, 0, 0), ResultsPerCallback = 1 };
        this.client.BeginRequest<object>(request, new RestCallback<object>(this.StreamCompletedEvent));
    }

    private void StreamCompletedEvent(RestRequest request, RestResponse<object> response, object userState)
    {
        //TO DO: check for errors first
        string json = response.Content;
    }

    public void EndStreaming()
    {
        this.client.CancelStreaming();
    }
}
  

Этот код работает и возвращает JSON, однако, похоже, я не могу включить потоковую передачу. Когда я раскомментирую строки ниже «Включить потоковую передачу», событие обратного вызова никогда не срабатывает. Важно отметить, что аутентификация выполняется с использованием параметра uri «auth».

К сожалению, похоже, что доступных библиотек Firebase нет, и REST — мой единственный вариант. Я хочу знать, когда изменяются свойства JSON, и хочу установить разные значения во время потоковой передачи.

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

1. Мы работаем с Hammock или hammock2 ? Первый был отменен. Вы добились какого-либо прогресса в этом? Уже пробовал поддержку Nest? Мне любопытно услышать результат.

Ответ №1:

Я не знаком с Hammock, но можете ли вы убедиться, что он настроен на перенаправление? Конечная точка потоковой передачи обычно выдает HTTP 307, чтобы сообщить клиенту о правильном сервере для подключения.

Ответ №2:

Я никогда не использовал Hammock, но, просматривая исходный код (кратко), кажется, что вам нужно настроить его как потоковый запрос с помощью StreamOptions. В Twitter есть несколько открытых источников, которые используют это здесь https://github.com/camertron/twitter-windows/blob/master/Source/Twitter/Classes/API/Streaming/UserStream.cs.

Способ, которым вы настроили Hammock здесь, ожидает завершения всего запроса перед вызовом обратного вызова. Этого (почти) никогда не произойдет с потоковым запросом, поскольку сервер сохраняет соединение открытым для получения новых результатов.

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

1. Спасибо за ваш ответ, но я все еще не могу заставить его работать. Вы упомянули о настройке с помощью StreamOptions — я, см. Код в OP.

2. упс, недостаточно внимательно прочитал прокомментированный код. Это в значительной степени исчерпывает мой опыт работы с Hammock