signalR中的第一个任意消息没有messageID?

时间:2013-05-18 16:32:42

标签: c# asp.net signalr

我写了这个简单的代码 - 当连接时,应该产生

  • “FIRST!”
  • “欢迎”
  • 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('<li><b>data received = </b>' + data +
                                  "<b>ConnectionId =</b> " + connection.id + 
                                  '<b>MessageId = </b>' + connection.messageId + '</li>');
    });

我收到所有回复。

但如果我按f5(刷新) - 这些是典型的回答:

enter image description here

再次刷新,

enter image description here

似乎第一条消息从不获得messageID

以后的消息有时会收到messageID而有时会

PS

我心想,也许这是一个初始化速度问题,所以我尝试了这个:

enter image description here

同样,回应是:

enter image description here

  • 这里发生了什么?为什么第一条消息没有得到messageID?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在SignalR 1.1中,设置了connection.messageId after已为一批消息调用了所有connection.received处理程序。

消息ID实际上仅供SignalR内部使用,但在SignalR 2.0中,connection.messageId将在调用connection.received处理程序之前设置。