我有一个ASP.net core 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 Client接收这些事件。不幸的是,我只收到第一个事件:
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,但是在发布应用程序时,由于local network loopback,UWP将无法访问localhost。>
谢谢。