C# 信号器中的第一条任意消息没有messageID?

C# 信号器中的第一条任意消息没有messageID?,c#,asp.net,signalr,C#,Asp.net,Signalr,我写了这个简单的代码,当连接时,应该会产生 “首先!” “欢迎” 3条信息(计时器) 代码如下: int i = 0; protected override Task OnConnected(IRequest request, string connectionId) { //first message Connection.Send(connectionId, "FIRST !"); //first message //last mess

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

  • “首先!”
  • “欢迎”
  • 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++;
    }
}
我确实收到了所有回复。

但如果我按f5(刷新)--以下是典型的响应:

再次刷新

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

后来的消息有时会获取messageID,而有时不会

附言 我心里想,可能是初始化速度问题,所以我尝试了以下方法:

同样,回答是:

  • 这是怎么回事?为什么第一条消息没有获得messageID?我怎样才能解决这个问题

在信号器1.1中,connection.messageId已设置所有connection.received处理程序已为一批消息调用


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

您的信号器版本是什么?还没有。预发布版将在未来几个月发布。同样,这不会改变信号器的功能,消息ID实际上只供信号器内部使用。@qub1n。connection.messageId在信号器2中调用connection.received处理程序之前设置。*。你打算用messageId做什么?我用它聊天。我已经下载了一些信号器0.5演示。我只是想知道我是否应该把它改写成信号机2.0。最后,它现在也适用于我:-)谢谢。只要知道,如果您在接收消息时检查
连接.messageId
,它可能会显示为一行中的多条消息具有相同的messageId。这是信号器批处理消息的方式的结果。SignalR客户端只需要每个批处理中最后一条消息的messageId,因此服务器发送的消息就到此为止。这就是我在回答中说消息ID是供信号员内部使用的原因之一。
connection.received(function (data)
        {

        $('#messages').append('<li><b>data received = </b>' + data +
                                  "<b>ConnectionId =</b> " + connection.id + 
                                  '<b>MessageId = </b>' + connection.messageId + '</li>');
    });