2

我正在使用 Nest API,它通过 Firebase 支持 REST 流。我有 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 属性何时发生变化并想在流式传输时设置不同的值。

4

2 回答 2

2

我不熟悉吊床,但你能确定它设置为跟随重定向吗?流式传输端点通常会发出 HTTP 307 以通知客户端要连接的正确服务器。

于 2014-07-10T16:23:18.400 回答
1

我从来没有使用过 Hammock,但通过源代码(简要地)看来,您需要使用 StreamOptions 将其设置为流式传输请求。Twitter 有一些在这里使用的开源https://github.com/camertron/twitter-windows/blob/master/Source/Twitter/Classes/API/Streaming/UserStream.cs

您在此处配置 Hammock 的方式是在调用回调之前等待整个请求完成。这将(几乎)永远不会发生在流请求中,因为服务器保持连接打开以推送新结果。

于 2014-06-30T21:55:06.127 回答