我正在尝试通过EventSource / Server-Sent Events协议在Windows Phone上使用Firebase API。
如果未设置,下面的代码将起作用Accept: text/event-stream
。这样,我得到了整个请求的json。但是当Accept设置为text / event-stream时,该任务不会继续。
随着request.AllowReadStreamBuffering
设置为false
不改变
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.AllowAutoRedirect = true;
request.Accept = "text/event-stream";
//request.AllowReadStreamBuffering = false;
Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,
request.EndGetResponse,
null)
.ContinueWith(async t =>
{
using (Stream s = t.Result.GetResponseStream())
{
byte[] buffer = new byte[1024 * 8];
int bytesRead = await s.ReadAsync(buffer, 0, buffer.Length);
string content = Encoding.UTF8.GetString(buffer, 0, bytesRead);
System.Diagnostics.Debug.WriteLine(content);
}
});
谢谢!
的request.Method = "GET"
是指比所述SSE协议PUT作用不同的HTTP操作方法。如果将请求方法设置为PUT,则会出现错误。
我不知道为什么,但是我解决了升级到Windows Phone 8.1并HTTPClient
在Windows.Web.Http
命名空间中使用的问题(在8.0中不可用)。
这是代码:
Uri url = new Uri("https://test.firebaseio.com/...");
var request = new HttpClient();
request.DefaultRequestHeaders.Accept.Clear();
request.DefaultRequestHeaders.Accept.Add(new Windows.Web.Http.Headers.HttpMediaTypeWithQualityHeaderValue("text/event-stream"));
Task task = request.GetAsync(url, HttpCompletionOption.ResponseHeadersRead).AsTask().ContinueWith(t =>
{
t.Result.Content.ReadAsInputStreamAsync().AsTask().ContinueWith(async t1 =>
{
IInputStream istr = await t1;
Stream s = istr.AsStreamForRead();
byte[] buffer = new byte[1024 * 8];
int bytesRead = await s.ReadAsync(buffer, 0, buffer.Length);
string content = Encoding.UTF8.GetString(buffer, 0, bytesRead);
System.Diagnostics.Debug.WriteLine(content);
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句