1

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

  • “第一的 !”
  • “欢迎”
  • 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(refresh) - 这些是典型的响应:

在此处输入图像描述

再次刷新,

在此处输入图像描述

似乎第一条消息永远不会得到messageID

后来的消息有时会得到 messageID,有时不会。

ps

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

在此处输入图像描述

再一次,回应是:

在此处输入图像描述

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

1 回答 1

2

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

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

于 2013-05-20T19:09:46.160 回答