Azure上的服务器端事件响应缓冲问题(ASP.NET Core Web App)

sxissh06  于 2023-06-24  发布在  .NET
关注(0)|答案(1)|浏览(113)

为了试验服务器端事件和asp.net核心,我编写了一个简单的Web应用程序来创建一个基本的聊天窗口。发送到服务器是通过使用fetch的简单 AJAX 调用完成的,而数据是由客户端使用服务器端事件接收的。一切都在我的本地机器上运行得很好,但当我将内容发布到Azure时,我发现客户端上偶尔会收到响应,通常会等待第二个聊天帖子才出现。
在我对此挠头了一段时间之后,我最终假设在Azure上进行了一些额外的响应缓冲,而在我的本地机器上不会发生。一个实验,我写了大量的虚拟数据后,每个帖子确实解决了这个问题,给了我的理论一些支持。
我在网上浏览了几篇文章,证实了我的怀疑。例如:https://learn.microsoft.com/en-us/azure/api-management/how-to-server-sent-events .特别提到:“* 关闭转发请求策略上的响应缓冲,以便事件立即中继到客户端。"*
我对Azure非常无知,以及超越最基本的东西是如何工作的。我试图弄清楚上面的文章(和其他类似的文章)是否与我相关。我编写了一个WebApp并发布了它,但这些文章提到的是一个“API管理示例”,这不是我发布应用时创建的。
所以,我们终于得出了这些问题:
1.尽管我的应用程序没有API,我是否需要创建API管理示例事件?
1.如果我确实关闭了这个缓冲,我是否可以只为SSE流而不是整个应用程序关闭它?

1.我是不是找错人了,还有更好的方法来解决这个问题?

yjghlzjz

yjghlzjz1#

最后我自己也想明白了。答案是#3:我找错人了。
简单的答案是在服务器端事件中间件中禁用缓冲。也就是说,在我的SSE中间件代码的开头,我添加了以下代码:

var responseBodyFeature = context.Features.Get<IHttpResponseBodyFeature>();
if (responseBodyFeature != null) responseBodyFeature.DisableBuffering();

虽然我无法解释在本地机器上没有这些行的情况下工作,但在Azure应用程序服务上失败......有了这个额外的代码,一切都可以在两个位置正常工作。

相关问题