我写了这个简单的代码 - 当连接时,应该产生
这是代码:
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('<li><b>data received = </b>' + data +
"<b>ConnectionId =</b> " + connection.id +
'<b>MessageId = </b>' + connection.messageId + '</li>');
});
我收到所有回复。
但如果我按f5(刷新) - 这些是典型的回答:
再次刷新,
似乎第一条消息从不获得messageID
:
以后的消息有时会收到messageID而有时会。
我心想,也许这是一个初始化速度问题,所以我尝试了这个:
同样,回应是:
答案 0 :(得分:2)
在SignalR 1.1中,设置了connection.messageId after已为一批消息调用了所有connection.received处理程序。
消息ID实际上仅供SignalR内部使用,但在SignalR 2.0中,connection.messageId将在调用connection.received处理程序之前设置。