标签: signalr-hub

Azure SignalR:HubException 方法不存在

我发现我们收到此错误:

Failed to invoke 'CreateChatRequest' due to an error on the server. HubException: Method does not exist.
at _this.callbacks.<computed> (chat.min.js:2060)
at HubConnection.processIncomingData (chat.min.js:2154)
at WebSocketTransport.HubConnection.connection.onreceive (chat.min.js:1881)
at WebSocket.webSocket.onmessage (chat.min.js:3922)
Run Code Online (Sandbox Code Playgroud)

该方法确实存在。该代码确实有效,然后经过一段时间的测试,它会返回此内容并且不会停止。

似乎可以暂时解决问题的是重新启动 Azure SigR 服务,但它又回来了。在开发过程中以本地 SigR 为目标时不会出现此问题;它只发生在 Azure SigR 上。

根据文档,当服务器上出现错误时,这似乎是一个包罗万象的错误,但没有记录任何异常。我已经打开了详细的错误,但这并没有改变从服务器返回的错误。我还尝试捕获异常并发回 HubException 以查看发生了什么,但这也没有改变错误消息。

TIA 寻求任何帮助。

azure signalr-hub azure-signalr

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

Serilog ILogger.ForContext 在 XUnit Mock 中抛出 NullReferenceException

尝试使用 Mock 对信号器组件进行单元测试时遇到问题。这是问题发生的地方

 _logger.LogInformation($"Registering a Station with id: {Id}" +
            $" with status: {Status}" +
            $"{(!string.IsNullOrEmpty(CommandId) ? $", with command: {CommandId}" : "")}", 
            LoggingConstants.Component.MessageHub,
            LoggingConstants.Class.Workstation, 
            !string.IsNullOrEmpty(AppointmentId) ? 
                AppointmentId : LoggingConstants.NoAppointmentId,
            LoggingConstants.NoConfirmationNumber);
Run Code Online (Sandbox Code Playgroud)

LogInformation 定义为

logger.ForContext("Component", (object) component, false).ForContext("Class", (object) @class, 
false).ForContext("AppointmentId", (object) appointmentId, false).ForContext("ConfirmationNumber", 
(object) confirmationNumber, false).Information(message);
Run Code Online (Sandbox Code Playgroud)

在 Xunit 单元测试类中,它被用作

public Mock<ILogger> MockLogger { get; set; }
MockLogger = new Mock<ILogger>();
Workstation = new Workstation(MockLogger.Object);
Run Code Online (Sandbox Code Playgroud)

当单元测试运行时,一旦它遇到 _logger.LogInformation() 消息,它就会抛出一个

"System.NullReferenceException : Object reference not set to an instance of an object.
at …
Run Code Online (Sandbox Code Playgroud)

mocking xunit signalr-hub serilog asp.net-core-signalr

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

连接到 SignalR 集线器时将 UserIdentifier 或 User.Identity.Name 设置为 null

我正在尝试使用 Angular 作为客户端应用程序创建一个 .net core 3.0 SignalR 项目。我已经在客户端和服务器之间建立了成功的连接,并向所有连接的客户端发送消息。我打算将消息发送给特定用户而不是所有连接的客户端。为了实现这一目标,我尝试使用 ConnectionId、UserIdentifier 和 User.Identity.Name。

我的服务器端代码/消息中心

namespace SignalR_server
{
    public class MessageHub : Hub
    {
        public static ConcurrentDictionary<string, string> MyUsers = new ConcurrentDictionary<string, string>();

        public override Task OnConnectedAsync()
        {
            string name = Context.User.Identity.Name;
            MyUsers.TryAdd( Context.ConnectionId,name);
            return base.OnConnectedAsync();
        }

        public override Task OnDisconnectedAsync(Exception exception)
        {
            string garbage;
            MyUsers.TryRemove(Context.ConnectionId, out garbage);
            return base.OnDisconnectedAsync(exception);
        }

        public void Send(string msg)
        {
            string strMessage = string.Empty;

            Clients.All.SendAsync("transfermessage",strMessage);
        }

        public string GetConnectionID()
        {
            return Context.ConnectionId;
        }

        public string GetUserIdentifier()
        { …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在将 signalR 与 websockets 结合使用时创建在集线器上的每个方法上调用的中间件

我将 signalR hub 与 Websockets 结合使用,我需要创建一个中间件,该中间件将在 hub 上的每个方法上调用。我曾经使用上下文访问器,但它只有 http 请求,该请求具有连接到集线器的第一个请求,而不是在集线器上调用的实际方法。

middleware signalr-hub asp.net-core

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

无法读取未定义的SignalR Hub的属性'chatHub'

我正在尝试学习信号器,这个错误我已经成立了.

无法读取未定义的属性'chatHub'.

$(document).ready(function () {
        var chat = $.connection.chatHub;
        $.connection.hub.start();
 });
Run Code Online (Sandbox Code Playgroud)

和hub文件是:

namespace TestSignalR.Web.Hubs
{
public class ChatHub : Microsoft.AspNet.SignalR.Hub
{
    public void Send(string msg)
    {
        ChatData chat = new ChatData();
        chat.Msg = msg;
        chat.UserName = HttpContext.Current.User.Identity.Name;
        chat.Date = "? at " + DateTime.Now.ToString("hh:mm tt");
        Clients.All.broadCastMessage(chat);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery signalr signalr-hub

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

无法在asp.net中的信号R中启动连接

以下是我的.aspx页面代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <link href="chat.css" rel="stylesheet" type="text/css" />
    <script src="Scripts/jquery-1.6.4.js" type="text/javascript"></script>
    <script src="Scripts/json2.js" type="text/javascript"></script>
    <script src="Scripts/jquery.signalR-1.0.0-rc2.min.js" type="text/javascript"></script>
    <script src="signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var query = window.location.search;
            var toRemove = '?id=';
            var gorge = query.replace(toRemove, '');
            // Proxy created on the fly
            var hub = $.connection.chatHub;
            $.connection.hub.qs = "Id=" + gorge;
            // Start the connection
            $.connection.hub.start(function () {
                //chat.server.getAllOnlineStatus();
            });
        });
    </script>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="container" class="wrap">
        <div id="chatbox" class="chatbox">
            <ul id="frndcontact"> …
Run Code Online (Sandbox Code Playgroud)

asp.net signalr signalr-hub

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

使用SignalR始终将数据从服务器推送到客户端

我正在开发一个Web应用程序,我有一些图表,我希望始终从数据库中获取图表的数据,以便用户始终拥有最新的数据图片.我使用signalR并在Report页面的页面加载中调用hub类中的服务器方法,该方法从数据库获取图表数据并将其传递到客户端,然后客户端的处理程序处理数据并绘制图表.我想要的是不断获取数据.我的选择是什么?

在一分钟的修复间隔后继续调用hub方法的最佳方法是什么?

asp.net signalr signalr-hub

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

SignalR行为:阻止长轮询

我想知道在我的网络应用程序中使用SignalR(c#,mvc).

场景:我的用户给我输入并处理它并向他们显示结果.这种处理可能很长.多久?让我们说3分钟(取决于网络流量,使用情况,...... - 无法预测).目前,我在AJAX请求中执行此过程进行长轮询.当AJAX运行时,我在屏幕上显示:"Please wait".

现在我在这个场景中添加了一个新的服务器限制:由于我正在使用CloudFlare,他们限制我每个请求必须花费不到100秒.否则,他们中止请求.

所以,我就是这样,并决定检查进入SignalR的选项.为什么?因为SignalR可以为我管理这个长时间的轮询.并且大多使用另一种方法(如套接字或其他技术),这可能会避免这种100秒的服务器限制.

我正在阅读SignalR网站,他们正在检查客户端功能并决定使用哪种技术.

我担心:由于CloudFlare将请求\响应限制为100秒,这可能会对SignalR造成问题.假设我的客户端是客户端,没有任何新的Web功能(如WebSocket或其他).这可能导致SignalR进行长轮询 - 这可能会失败.

是否可以定义SignalR以避免长轮询?或者您如何建议避免这种有问题的情况.

c# asp.net-mvc signalr signalr-hub signalr.client

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

在Chrome中,当集线器代码广播到客户端时,SignalR 2.1.1集线器客户端到集线器方法会提前终止连接

我有一个SignalR 2.1.1强类型集线器,客户端调用服务器集线器方法,在该方法中,广播被发送到客户端(在我的测试用例中,它只是被调用的调用者).

hub方法没有返回值(async public Task Test()).从服务器端看,hub方法似乎没有异常.在客户端,我得到Error: Failed at parsing response: {"C":"d-4336366B-A,0|B,1|C,2|D,0|E,0","M":[{Clearing hub invocation callbacks with error: Connection was disconnected before invocation result was received.

在完全发送响应之前,似乎连接已终止.

问题出现在Windows 7上的Chrome中,但不会出现在IE 11中.

简化的集线器类

public class MessengerHub : Hub<IMessengerClient>, IMessengerHub
{
    async Task IMessengerHub.TestActivityNotification()
    {
        ConnectionInfo info = _connectionInfo[_hub.Context.ConnectionId];

        Activity activity = new Activity
        {
            ActivityId = Guid.NewGuid(),
            ContactId = info.UserId,
            DateTime = DateTime.UtcNow,
            DeviceId = info.DeviceId,
            Kind = ActivityKind.Message,
            SubKind = ActivitySubKind.MessageSent
        };

        // This code is actually in …
Run Code Online (Sandbox Code Playgroud)

signalr signalr-hub

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

将1.x的onDisconnected()方法处理为SignalR 2.1.2

我之前在Asp.Net-MVC项目中实现了信号R 1.1.3版本,但现在我需要用最新的信号更新信号R版本,它是信号R 2.1.2,在信号R 2.1.2里面问题是它onDisconnected()在hub类中不支持方法.我可以在项目中处理信号R的断开事件.

c# json.net asp.net-mvc-4 signalr signalr-hub

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