#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