signalr收不到服务器的信息,重新连接的客户端SignalR没有收到消息 - javascript

我在作为服务运行的服务器上运行了SignalR Hub。由于任何原因,此服务器可能会因断电,正在更新(我们使用八达通自动更新)或其他原因而停止运行。

如果我有一个用户连接到此服务,则将消息发送到服务器,然后将消息转发到传感器。然后,传感器将消息返回到服务器,然后转发到客户端Webapp。

这在第一个连接上工作正常。如果服务在重新连接超时之前停止并重新启动,则我将获得具有相同连接ID的重新连接,并且可以发送消息。但是,我无法接收消息。

如果刷新页面,则会在创建新连接时得到它们。无论是OnConnect()还是OnReconnect(),都将调用相同的代码。

public override Task OnConnected()

{

EstablishConnection("Connect");

return base.OnConnected();

}

public override Task OnReconnected()

{

// Remove old Connection Id to receive messages on reconnect

ConnectionsHandler.Instance.RemoveTerminalClient(Context.ConnectionId);

EstablishConnection("Reconnect");

// This block is to tell the user that connection has been reconnected. This message shows on the webapp so connection has been restored.

var hubContext = GlobalHost.ConnectionManager.GetHubContext();

var message = TerminalMessageColorer.ColorMessageLime(String.Format("Connection has been re-established!"));

hubContext.Clients.Client(Context.ConnectionId).TerminalEcho(message);

return base.OnReconnected();

}

private void EstablishConnection(string conType)

{

ConnectionsHandler.Instance.AddTerminalClient(Context.ConnectionId, "null");

var terminal = ConnectionsHandler.Instance.GetTerminalClient(Context.ConnectionId);

#if DEBUG

Console.ForegroundColor = ConsoleColor.Yellow;

Console.WriteLine("{0}\t{1}\t...{2}", terminal, Context.ConnectionId, conType);

#endif

}

参考方案

我发现了问题所在。我需要在客户端代码中包装$timeout,因为C#代码似乎有点延迟。调试初始化程序后,我从chrome开发工具中偶然发现了这一点,以为未传递用户ID一定是错误的。一旦我在初始化调用处添加了一个断点,它就会去那里进行工作,但是从那里继续下去,之后我会收到消息。没有断点,我不会。所以我在通话周围添加了$timeout。

$timeout(function () {

initializeTerminal();

}, 100);

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …JavaScript中的字符串评估函数 - javascript

JavaScript中是否有任何内置函数,例如Python中的eval内置函数?注意:eval函数将方程式作为字符串并返回结果。例如,假设变量x为2,则eval("2x+5")返回9。 参考方案 是的,JavaScript中也有eval函数。此外,该声明应有效用于评估,即eval("2*x+5"…如何在JQuery中操作JSONArray - javascript

我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…在两个值之间匹配并返回正则表达式 - javascript

我正在尝试使用正则表达式从字符串中获取值,该值是tt="和"&之间的文本的值因此,例如,"tt="Value"&"我只想从中得到单词"Value"。到目前为止,我已经有了:/tt=.*&/这给了我"tt=Value"&,然后,要…获取JavaScript值到C#字符串 - javascript

是否可以在C#中执行类似的操作?该值为“ 10/05/2014”string jsValue = javascript("$('#EstimatedStartDate').val()"); 参考方案 您能否更详细地阐明您要做什么。看来您正在尝试从javascript(客户…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要从客户端使用 SignalR 发送消息到服务端,你需要按照以下步骤进行操作: 1. 在客户端引入 SignalR 库:在你的客户端应用程序中,引入 SignalR 库。这可以通过在你的 HTML 页面中添加 SignalRJavaScript 文件来完成。 2. 创建 SignalR 连接:在客户端代码中,创建一个 SignalR 连接对象。使用连接对象,你可以与服务端建立连接并发送消息。 ```javascript var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build(); ``` 在这个例子中,我们使用 "/chatHub" 作为 SignalR Hub 的 URL。你可以根据你的实际情况进行调整。 3. 定义服务端方法:在服务端,你需要定义一个或多个方法来处理客户端发送的消息。这可以通过在你的 Hub 类中创建公共方法来完成。 ```csharp public class ChatHub : Hub { public async Task SendMessage(string user, string message) { // 处理收到消息 // ... // 向客户端发送消息 await Clients.All.SendAsync("ReceiveMessage", user, message); } } ``` 在这个例子中,我们定义了一个名为 "SendMessage" 的方法,它接收一个用户和一个消息作为参数。在方法中,你可以处理收到消息,并使用 `Clients.All.SendAsync` 方法将消息发送给所有连接客户端。 4. 建立连接并发送消息:在客户端代码中,使用连接对象来建立与服务端的连接,并发送消息。 ```javascript connection.start().then(function () { connection.invoke("SendMessage", user, message).catch(function (err) { console.error(err); }); }).catch(function (err) { console.error(err); }); ``` 在这个例子中,我们使用 `connection.start()` 方法来建立与服务端的连接。一旦连接建立成功,我们使用 `connection.invoke("SendMessage", user, message)` 方法来调用服务端的 "SendMessage" 方法,并传递用户和消息作为参数。 这样,你就可以从客户端使用 SignalR 发送消息到服务端了。确保客户端和服务端的代码正确配置和匹配,以确保连接消息传递的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值