什么是缓冲 Azure Web 角色上的 SignalR 服务器发送事件?

What is buffering SignalR Server Sent Events on Azure Web Role?

我有一个连接到 Azure 上托管的 SignalR 服务器的 Xamarin 应用程序。

由于 Xamarin 运行 over mono,websockets 不可用。

当我的服务器托管在 Azure 移动服务上时,应用程序使用 SSE。

由于移动服务太有限,我将服务器移到了 Web 角色。

现在我的应用无法使用 SSE 进行连接,并在 5 秒超时间隔后回退到长轮询。

我尝试创建一个新的 Web 角色并只添加 SignalR。仍然遇到同样的问题。

我有identified/tried以下:

  1. 看起来 SSE 请求正在 Azure 的某处进行缓冲。如果我使用代理,我可以看到请求,但只有在 SignalR 超时并关闭连接后才会收到第一个响应字节。
  2. 我的网络上没有代理或类似的东西 - 我仍然可以通过 SSE 连接到我的旧移动服务服务器。
  3. 我在服务器上打开了跟踪,看起来 SignalR 正在做它的事情 - 它 returns 对 SSE connect 请求的响应。
  4. 在AuthorizeRequest阶段我也能在IIS中看到SSE请求,这意味着连接已打开。
  5. 我禁用了动态压缩。没有帮助。

总而言之,SSE 连接似乎已建立并保持打开状态,但某些东西阻止了来自 SignalR 的数据到达客户端。

我在这里读到这可能是 Http 平台处理程序的问题。但据我所知,这与网络角色无关,因为它是 IIS 中的普通 C# 代码 运行。

尝试使用 HTTPS - 它将防止代理干扰事件流。