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?我怎样才能解决这个问题
消息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>');
});