标签: signalr-hub

如果连接未处于“已连接”状态,则无法发送数据

在 Angular 6 中使用 SignalR 做一个非常简单的调用来设置连接/停止,我有以下代码:

信号R.helper.ts

  public static setupHub<T>(hubUrl: string, eventName: string, callback: (data: T) => void, ...params: SignalRParam[]): HubConnection {
    const token = localStorage.getItem(appConstant.token);
    const url = this.buidlUrl(hubUrl, ...params);
    const connection = new HubConnectionBuilder()
        .withUrl(url,
            { transport: HttpTransportType.WebSockets, accessTokenFactory: () => token })
        .build();
    environment.production && connection.start();
    !environment.production && connection.start().catch(err => console.error(err.toString()));
    connection.on(eventName, callback);
    return connection;
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试在我的页面上登录,我会在控制台上不断收到此错误:

signalR.helper.ts:19 错误:如果连接未处于“已连接”状态,则无法发送数据。

我是 SignalR 和 Angular 的新手,为什么我一直收到这个错误?

signalr signalr-hub typescript angular angular6

8
推荐指数
1
解决办法
9424
查看次数

SignalR 与 Angular 10 和 ASP.NET

我正在尝试在 ASP.NET(不是 Core)和 Angular(当前为 10)应用程序中实现 SignalR。Startup.cs 使用 Owin。

我能找到的每个文档或示例要么适用于 ASP.NET Core,要么没有使用 Angular,所以有人可以为我指出一个好的方向吗?

我能找到的最接近这个组合的是这个指南: https: //www.c-sharpcorner.com/article/asp-net-signalr-angular2-and-typescript-real-time-clock/,但是我不断得到“无法读取未定义的属性“hubConnection””错误,可能是因为自从我开始使用 Angular 7 及更高版本以来,我不明白“$”在 SignalRService 类中做什么。

任何帮助将不胜感激。

asp.net signalr signalr-hub angular

8
推荐指数
2
解决办法
1万
查看次数

一段时间后 SignalR 停止工作

出于某种原因,SignalR 将在短时间内(我估计大约 1 小时或更短)后停止调用客户端方法。我有一个显示警报的页面......一个非常简单的实现。这是Javascript:

$(function () {

    // enable logging for debugging
    $.connection.hub.logging = true;

    // Declare a proxy to reference the hub. 
    var hub = $.connection.alertHub;

    hub.client.addAlert = function (id, title, url, dateTime) {
        console.log(title);
    };

    $.connection.hub.start().done(function () {
        console.log("Alert Ready");
    });
});
Run Code Online (Sandbox Code Playgroud)

如果我刷新页面,它会再次工作大约一个小时,然后将停止调用客户端事件addAlert。日志中没有错误,没有警告。日志中的最后一个事件(除了对服务器的 ping)是:

[15:18:58 GMT-0600 (CST)] SignalR:在中心“AlertHub”上触发客户端中心事件“addAlert”。

许多这些事件会在短时间内出现,然后停止,即使服务器应该仍在发送它们。

我在 Mac 和 SignalR 2.0.0 上使用 Firefox 35.0.1。

我意识到解决方法是每 10 分钟左右强制刷新一次页面,但我正在寻找一种方法来解决问题的根本原因。

我在服务器上启用了 SignalR 跟踪。在重新刷新警报页面并且警报通过后,我在服务器上创建了一个“警报”。我等了大约 10 分钟,我又试了一次,但没有通过。这是日志读取的内容(抱歉冗长,不确定什么是相关的):

SignalR.Transports.TransportHeartBeat Information: 0 : Connection b8b21c4c-22b4-4686-9098-cb72c904d4c9 is New.
SignalR.Transports.TransportHeartBeat Verbose: 0 …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net signalr signalr-hub

7
推荐指数
1
解决办法
4985
查看次数

浏览器多个选项卡中的不同连接

为什么 SignalR 在浏览器的多个选项卡中为同一登录用户建立不同的连接。有没有办法为在同一浏览器中打开的所有选项卡建立一个连接。从连接我的意思是 SignalR 中用户的 connectionID。

signalr signalr-hub signalr.client

7
推荐指数
1
解决办法
7139
查看次数

Signalr 协商 url 失败

试图让信号器启动并运行。我不断从服务器收到 2 个错误:

  1. GET 协商 url 返回 500 内部服务器错误
  2. XMLHttpRequest 无法加载http://localhost:10772//signalr/negotiate ... 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' http://localhost:3000 '。响应的 HTTP 状态代码为 500。

提供截图。

有任何想法吗?

在此处输入图片说明] 1

signalr signalr-hub

7
推荐指数
1
解决办法
3778
查看次数

使用 IHubContext 实例化 SignalR Hub 对象

SignalR 集线器的一大用途似乎是向所有其他客户端显示一个客户端的操作。我希望使用 SignalR 的目的是,当我的服务器端代码中发生某个事件时,我想实例化一个集线器对象并调用其方法之一来与所有客户端进行通信。如果您看到我之前的文章(Route To Take With SqlDependency OnChange),我想在 SqlDependency 的 OnChange 方法中执行此操作。经过研究,我发现有些人谈论使用 IHubContext 对象,尽管我还没有找到很多实例化和实际向客户端发送数据的示例。

这是否可以做到(如果可能的话,使用 IHubContext 向所有客户端发送数据可能会是什么样子),如果不可能,有什么方法可以绕过实例化这样的集线器?

c# asp.net sqldependency signalr signalr-hub

7
推荐指数
1
解决办法
9258
查看次数

如何将Hub内容从任何服务器带到*另一个服务器*项目中心?

代码的安排和它令人满意的地方存在混淆,所以我希望找到以下解释:

当我有一台服务器" https:// localhost:48009 / "时,该应用程序配备了Signal-R的所有要求,并且还存在Hub.在文件夹中Hubs有一个Hub类ChatHub.cs

using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            // Call the addNewMessageToPage method to update clients.
            Clients.All.addNewMessageToPage(name, message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在 Chat.cshtml

@{
    ViewBag.Title = "Chat";
}
<h2>Chat</h2>
<div class="container">
    <input type="text" id="message" />
    <input type="button" id="sendmessage" value="Send" />
    <input type="hidden" id="displayname" />
    <ul id="discussion">
    </ul>
</div>
@section scripts {
    <!--Script references. -->
    <!--The jQuery library is required …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc signalr signalr-hub

7
推荐指数
1
解决办法
131
查看次数

在 ASP.Net Boilerplate 中,从应用程序服务层调用 SignalR Hub 是一种不好的做法吗?



我将 Asp.Net 样板模板与 ASP.Net Core 2.1 一起使用。
我在 Web.Core 程序集中实现了一个集线器并创建了一个控制器。
我可以从任何客户端使用我的集线器订阅/通知数据,这不是我的问题。

我想在应用程序服务层中使用此集线器,但默认情况下应用程序服务层不引用SignalR。

所以我的问题是:
在应用程序服务层引用 SignalR 是一种不好的做法吗?

提前致谢 !

问候, 皮埃尔-吕克

c# signalr-hub aspnetboilerplate

7
推荐指数
1
解决办法
1659
查看次数

如何使用 aspnetcore signalR 向特定用户发送消息?

我需要向特定用户发送通知。我正在使用 dotnet core 3.1。用于通知的 ASPNETCORE signalR。我可以将消息发送给所有客户端,但无法为特定用户发送消息。

编辑1

我的中心看起来像:

public class NotificationHub : Hub
{
    public override async Task OnConnectedAsync()
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, Context.User.Identity.Name);
        await base.OnConnectedAsync();
    }

    public override async Task OnDisconnectedAsync(Exception ex)
    {
        await Groups.RemoveFromGroupAsync(Context.ConnectionId, Context.User.Identity.Name);
        await base.OnDisconnectedAsync(ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

我从控制器调用 SendAsync 方法如下:

 private IHubContext<NotificationHub> _hub;

    public NotificationController(IHubContext<NotificationHub> hub)
    {
        _hub = hub;
    }

[HttpGet]
    public IActionResult Get()
    {
        //_hub.Clients.All.SendAsync("SendMessage",
        _hub.Clients.All.SendAsync("SendMessage",
            new
            {
                val1 = getRandomString(),
                val2 = getRandomString(),
                val3 = getRandomString(),
                val4 = getRandomString()
            });

        return Ok(new { Message …
Run Code Online (Sandbox Code Playgroud)

c# signalr signalr-hub asp.net-core-signalr

7
推荐指数
1
解决办法
1万
查看次数

SignalR 可以在客户端断开连接时对消息进行排队,并在客户端重新连接时将消息重新发送给客户端吗?

目前,我们使用 SignalR 在 UI 客户端上从后端接收实时消息。UI 客户端在在线并连接到 SignalR 时接收消息,并在断开连接时错过消息(例如:用户关闭页面并且 SignalR 断开客户端连接)。但是,现在我们需要向用户显示所有消息,包括 UI 客户端离线时 SignalR 发送的消息。SignalR 可以支持这种场景吗?该要求类似于 UI 客户端消息的持久队列,但我们使用 SignalR 向所有客户端广播消息。

signalr signalr-hub signalr.client signalr-backplane asp.net-core-signalr

7
推荐指数
1
解决办法
2811
查看次数