尝试解决问题,但无法理解为何会出现此类错误。
我在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个事件,一个正常,另一个&#34; EventSource的响应具有MIME类型&# 34;(http status = 401)。
现在问题是,如果我发送SessionId,两个客户端都会收到所有事件?
您可以让每个用户收到他们的活动吗?
var eventSource = new EventSource(&#39; / event-stream&#39;);
客户端处理程序:
$(eventSource).handleServerEvents({
handlers: {
DataRetModel: function (data) {
console.log(data);
}
}
});
答案 0 :(得分:2)
现在问题是,如果我发送SessionId,两个客户端都会收到所有事件?
通过SessionId发送通知会将其发送给具有相同会话ID的所有客户端,如果您使用的是浏览器,则表示所有浏览器标签。
如果您只想将其发送到单个SSE订阅(即单个浏览器选项卡),则需要将其发送给客户SSE SubscriptionId
,您需要将其传递到您的服务中,以便它知道在哪里发送通知。在SSE客户端建立连接后,您可以从onConnect
处理程序获取subscriptionId。