signalR中的第一条任意消息没有messageID?
我写了这个简单的代码 – 当连接时,应该屈服
- “第一个!”
- “欢迎”
- 3条消息(定时器)
这是代码:
int i = 0; protected override Task OnConnected(IRequest request, string connectionId) { //first message Connection.Send(connectionId, "FIRST !"); //first message //last messages Timer _timer = new Timer(RunMe, new {con = connectionId, req = request}, 2000, 1000); //second message return Connection.Send(connectionId, "Welcome!"); //second message } void RunMe(dynamic state) { if (i < 3) { Connection.Send((string) state.con, "Loop " + i); i++; } }
这里是JS代码(在document.ready
块中):
…
connection.received(function (data) { $('#messages').append('data received = ' + data + "ConnectionId = " + connection.id + 'MessageId = ' + connection.messageId + ' '); });
我得到了所有回复。
但如果按f5(刷新) – 这些是典型的响应:
再刷新,
似乎第一条消息永远不会获得messageID
:
以后的消息有时会获得messageID, 有时则不会。
PS
我心想,也许这是一个初始化速度问题,所以我尝试了这个:
而且,回应是:
- 这里发生了什么 ? 为什么第一条消息没有得到messageID? 我怎么解决这个问题?
在SignalR 1.1中, 在为一批消息调用所有connection.received处理程序之后设置connection.messageId。
消息ID实际上仅供SignalR内部使用,但在SignalR 2.0中,connection.messageId将在调用connection.received处理程序之前设置。