UWP中的接收服务器已发送事件(SSE)

问题描述 投票:0回答:1

我有一个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中创建行为以始终监听该连接并接收可以进一步处理的事件?

c# uwp server-sent-events
1个回答
0
投票

HttpClient从发起请求开始,到收到服务器返回的数据时结束。

这等效于仅发出一个请求。如果要在应用程序和服务器之间建立连续的数据传输通道,请尝试使用WebSocket

这里是使用WebSocket作为参考的代码示例:WebSocket sample


此外,在使用Visual Studio进行调试时,您可以访问localhost,但是在发布应用程序时,由于local network loopback,UWP将无法访问localhost。>

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.