ServiceStack 服务器端事件错误

ServiceStack Server-Side Events errors

正在尝试解决问题,但无法理解为什么会出现此类错误。

我在 cosole Google Chrome 中收到此错误:EventSource 的响应的 MIME 类型 ("text/html") 不是 "text/event-stream"。正在中止连接。

public class Item {
    public int Index { get; set; }
    public int Value { get; set; }
}

public class DataRetModel {        
    public List<Item> Items { get; set; }
    public Item Item { get; set; }        
}

ServerEvents.NotifySession(user.SessionId, new DataRetModel{...init...});

感谢帮助!

.........

在使用 Fidler 分析请求后(感谢@mythz 的想法)我发现了以下内容: 有 2 个客户端浏览器 运行 服务器事件的处理程序,如果您在一个浏览器中注销,那么另一个将获得 2 个事件,一个正常,另一个 "EventSource''s response has a MIME type"(http status=401).

现在问题来了,如果我向它们发送 SessionId,为什么两个客户端都会收到所有事件?

您可以让每个用户都收到他们的事件吗?

var eventSource = new EventSource('/event-stream');

客户端处理程序:

$(eventSource).handleServerEvents({
    handlers: {
       DataRetModel: function (data) {
           console.log(data);
       }
    }           
 });

Now the question arises why both clients receive all events if I send them the SessionId?

通过 SessionId 发送通知会将其发送给具有相同会话 ID 的所有客户端,如果您使用的是浏览器,则意味着所有浏览器选项卡。

如果您只想将其发送到单个 SSE 订阅(即单个浏览器选项卡),则需要将其发送到客户端 SSE SubscriptionId,您需要将其传递到您的服务中,以便它知道将通知发送到哪里。您可以在 SSE 客户端建立连接后从 onConnect 处理程序中获取 subscriptionId。