在 UWP 中接收服务器发送的事件 (SSE)
Receive Server Sent Events (SSE) in UWP
我有一个 ASP.net 核心 3.1 服务器项目,它有一个非常简单的 API 发送单向服务器发送事件 (SSE),如下所示:
[HttpGet]
public async Task Get()
{
var response = Response;
response.Headers.Add("Content-Type", "text/event-stream");
response.Headers.Add("Cache-Control", "no-cache");
response.Headers.Add("Connection", "keep-alive");
for (var i = 0; true; ++i)
{
await response.WriteAsync($"id: unique{i}\n");
await response.WriteAsync("event: add\n");
//await response.WriteAsync("retry: 10000\n");
await response.WriteAsync($"data: Controller {i} at {DateTime.Now}\n\n");
response.Body.Flush();
await Task.Delay(5 * 1000);
}
}
现在我想通过 C# UWP 客户端接收这些事件。不幸的是我只收到第一个事件:
using (var client = new HttpClient())
{
using (var stream = await client.GetStreamAsync("http://localhost:5000/api/subscription"))
{
using (var reader = new StreamReader(stream))
{
while (true)
{
Console.WriteLine(reader.ReadLine());
}
}
}
}
如何在 UWP 中创建一个行为,以便始终监听该连接并接收我可以进一步处理的事件?
HttpClient
从发起请求开始,到收到服务器返回的数据结束。
这相当于只提出一个请求。如果你想在应用程序和服务器之间建立一个连续的数据传输通道,尝试使用WebSocket
这里有一个使用WebSocket的代码示例供参考:WebSocket sample
另外,使用Visual Studio调试时,可以访问localhost,但是在发布应用时,UWP会因为local network loopback
无法访问localhost
谢谢。
我在这里找到了解决方案 https://techblog.dorogin.com/server-sent-event-aspnet-core-a42dc9b9ffa9。
诀窍是不要像问题中那样设置连续 returns 数据的 WebAPI 调用,而是创建具有 MIME 类型 text/event-stream
.
的数据流
在 UWP 客户端,您可以像这样读取流:
var stream = httpClient.GetStreamAsync(requestUri).Result;
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
Debug.WriteLine(reader.ReadLine());
}
}
我有一个 ASP.net 核心 3.1 服务器项目,它有一个非常简单的 API 发送单向服务器发送事件 (SSE),如下所示:
[HttpGet]
public async Task Get()
{
var response = Response;
response.Headers.Add("Content-Type", "text/event-stream");
response.Headers.Add("Cache-Control", "no-cache");
response.Headers.Add("Connection", "keep-alive");
for (var i = 0; true; ++i)
{
await response.WriteAsync($"id: unique{i}\n");
await response.WriteAsync("event: add\n");
//await response.WriteAsync("retry: 10000\n");
await response.WriteAsync($"data: Controller {i} at {DateTime.Now}\n\n");
response.Body.Flush();
await Task.Delay(5 * 1000);
}
}
现在我想通过 C# UWP 客户端接收这些事件。不幸的是我只收到第一个事件:
using (var client = new HttpClient())
{
using (var stream = await client.GetStreamAsync("http://localhost:5000/api/subscription"))
{
using (var reader = new StreamReader(stream))
{
while (true)
{
Console.WriteLine(reader.ReadLine());
}
}
}
}
如何在 UWP 中创建一个行为,以便始终监听该连接并接收我可以进一步处理的事件?
HttpClient
从发起请求开始,到收到服务器返回的数据结束。
这相当于只提出一个请求。如果你想在应用程序和服务器之间建立一个连续的数据传输通道,尝试使用WebSocket
这里有一个使用WebSocket的代码示例供参考:WebSocket sample
另外,使用Visual Studio调试时,可以访问localhost,但是在发布应用时,UWP会因为local network loopback
无法访问localhost谢谢。
我在这里找到了解决方案 https://techblog.dorogin.com/server-sent-event-aspnet-core-a42dc9b9ffa9。
诀窍是不要像问题中那样设置连续 returns 数据的 WebAPI 调用,而是创建具有 MIME 类型 text/event-stream
.
在 UWP 客户端,您可以像这样读取流:
var stream = httpClient.GetStreamAsync(requestUri).Result;
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
Debug.WriteLine(reader.ReadLine());
}
}