标签: signalr-hub

SignalR JS客户端方法未被调用

我无法获得SignalR服务器端Hub代码来调用JS客户端方法.反过来工作正常 - 所以当我的客户端向服务器发送消息时,它按预期交付.我一直都非常小心避免明显的陷阱,但我想我仍然会忽略一些东西.这是我的代码:

来自MessageHub.cs:

public bool SendMessage( ClientMessage message )
{
    ...
    Clients.All.addMessage("my message");
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

$.connection.hub.start()
    .done(function () {
        messageHub = $.connection.message;

        // addMessage is never invoked.
        messageHub.client.addMessage = function (message) {
            alert('message added');
        };

        /* // I tried this based on some sample code but still not invoked.
        messageHub.addMessage = function (message) {
            alert('message added');
        };
        */

        // This works as expected.
        messageHub.server.registerUser(userId);
        ...
    });
Run Code Online (Sandbox Code Playgroud)

如上所述,我找不到任何明显的设置缺陷,但这里有一些可能的相关点:

  • 建立连接并调用服务器端方法.
  • 这可能是无关紧要的,但我尝试强制不同的传输而不改变行为.
  • 客户端方法名称在任何时候都不会与服务器方法名称冲突.
  • 我也尝试将消息发送到特定的客户端连接(在这种情况下,这实际上是目标).
  • 我在客户端和服务器上都启用了日志记录,但在任何一种情况下都没有看到任何相关内容.

所以,鉴于上述情况,我错过了一些明显的东西吗?如果没有,识别故障点的最佳方法是什么?

PS这与问题没有特别的关系,但是,由于某些原因,Fiddler不再从我的任何浏览器捕获任何流量,这使得调试WS或HTTP流量有点挑战 - 我猜这是Windows 8的事情. ..

signalr-hub

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

在从Web访问的自托管SignalR服务器中实现授权

我正在寻找关于如何在自托管(非IIS)环境中运行的后端服务上实现SignalR的授权安全性的一些指导,该环境是从Web应用程序调用的.后端应用程序基本上是一个监视器,可以将SignalR事件激发回基于HTML的客户端.这一切都很好(实际上非​​常好).

但是,我们需要从Web站点限制对经过身份验证的用户的服务器访问.所以基本上如果用户在网站上进行了身份验证,我们需要在后端应用程序中以某种方式获取凭据(用户名就足够了)和验证状态,以决定是否允许连接以避免未经授权的访问.

任何人都可以指出如何完成这种授权转发的一些策略或模式?

signalr signalr-hub signalr.client

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

如何在 SignalR 中将参数传递给集线器?

我在 SignalR hub 中的代码:

public class AlertHub : Hub
{
    public static readonly System.Timers.Timer _Timer = new System.Timers.Timer();

    static AlertHub()
    {
        _Timer.Interval = 60000;
        _Timer.Elapsed += TimerElapsed;
        _Timer.Start();
    }

    static void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        //Random rnd = new Random();
        //int i = rnd.Next(0,2);
        Alert alert = new Alert();
        i = alert.CheckForNewAlerts(EmpId);

        var hub = GlobalHost.ConnectionManager.GetHubContext("AlertHub");

        hub.Clients.All.Alert(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

不知何故,我需要传递 EmpId 参数。如何做到这一点?

更多客户详细信息: 在我的 aspx 页面上,我有以下代码:

<script type="text/javascript">

    $(function () {
        var alert = $.connection.alertHub;
        alert.client.Alert = function (msg) …
Run Code Online (Sandbox Code Playgroud)

c# signalr signalr-hub

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

更改signalR上的查询字符串

是否可以在不执行停止和启动的情况下更改SignalR连接上的查询字符串?

我这样做:

$.connection.hub['qs'] = {arg1: 'kkkk', arg2: 'xxx',...};
$.connection.hub.stop();
$.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)

这种停止/启动导致我的系统将其解释为连接中断,出于多种原因这是不可取的.

当我删除它时,使用较旧的查询字符串参数调用方法.

signalr signalr-hub

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

SignalR 2.2.0 WebSocket 连接到集线器时出错

我有一个 ASP.Net MVC 应用程序,我已将 SignalR 添加到其中。在遵循“入门”教程(当然进行了修改,因为它出现在我的应用程序中)之后,我让它在本地主机上运行。但是一旦进入生产环境,就会出现以下错误:

与“ws://xxxxx/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=xxxxx”的 WebSocket 连接失败:连接在收到握手响应之前关闭。

我可以访问/signalr/hubs(我得到一个js文件)。关于为什么会发生这种情况有什么想法吗?

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

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

SignalR版本兼容性(StatusCode:405'方法不允许')

我正在处理我正在研究的S​​ignalR项目的问题.我正在尝试使用.Net Core构建服务器,使用传统的.Net(框架4.6.1)构建客户端.但是,服务器和客户端似乎不兼容.

我遇到的最后一个问题是StatusCode:405,ReasonPhrase:'Method Not Allowed'.我在GitHub上找到了一个答案,表明版本之间存在许多重大变化.

看看可用的NuGet包版本,我更加困惑.对于.Net Core服务器,我正在使用1.0.0-preview1-final.还有一个1.0.0-alpha2-final可用,但我不知道'alpha'是否比'preview'更新或更旧.

在客户端我使用的是2.2.2版本,并且有各种版本可供选择,我尝试了最旧和最新版本,但两个版本都给了我相同的"方法不允许"错误.

错误是在客户端,在服务器端,我的断点甚至没有被击中,所以它也可能是一个Owin/iis问题.

有没有可以映射SignalR客户端和服务器版本兼容性的图表?我想这将是向前迈出的一大步.

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

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

SignalR客户端服务器已连接但未将数据推送到生产服务器上的客户端

我使用SignalR开发了一个Web应用程序,它在我的开发服务器上完美运行.但由于一些未知的原因,它不适用于生产服务器.

我做了一些测试:

$.connection.hub.start().done(function () {

        console.log('started');

});
Run Code Online (Sandbox Code Playgroud)

这总是按照预期在控制台中"启动".所以客户端和服务器是连接的.但是,当我发送任何数据,如登录凭据时,我没有收到任何回复.

这是连接帧图像.正如您所看到的,客户端正在向服务器发送数据但未收到任何响应.

在此输入图像描述

public override Task OnConnected()
{

        Clients.All.Listen("Connected to HUB");

}
Run Code Online (Sandbox Code Playgroud)

客户端侦听方法:

hub.client.listen = function (response) {

    console.log('Listen', response);

}
Run Code Online (Sandbox Code Playgroud)

有一个我用来调试的Listen方法.这不会打印任何东西.所以信号器客户端服务器没有连接.

编辑:

报告的问题在这里:https://github.com/SignalR/SignalR/issues/4279如果这有帮助.

EDIT2:

我的webapp是一个Vue js 2应用程序.我使用vue-cli编译并上传到服务器.我的signalr.js文件是从ASP.NET MVC项目复制的.

我使用SignalR 2.4制作了一个测试ASP.NET MVC 5应用程序,我能够在实时服务器上进行通信.

signalr signalr-hub signalr.client

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

信号R客户端-Xamarin表单-连接中心无法正常使用C#

为什么以下代码无法将我连接到集线器?

****我没有使用Azure函数****

我将天蓝色钥匙放在哪里?

如何建立这个复杂的网址?

这类似于我原来的天蓝色密钥AccessKey = 09988588488378383azudjGHG / E =&Version = 1123.0“;

我知道服务器和集线器正在运行,因为我使用Java创建了示例,并且该示例正在运行(请参见下面的实现)。

无论我尝试使用哪个URL,我都将“断开连接”。

public event EventHandler<MessageEventArgs> OnReceivedMessage;
public void bindConnectionMessage(bool useHttps)
{
    string urlRoot = "test.signalr.net/?AccessKey=Iwillneversharethiskeyjajajajaj####/E=&Version=1123.0";
    var url = $"http{(useHttps ? "s" : string.Empty)}://{urlRoot}/ChatHub";

    hubConnection =
     new HubConnectionBuilder().WithUrl
     (url)
     .Build();



    hubConnection.On<string>("Send", (message) =>
    {
        var finalMessage = $"Sending something {message}";
        OnReceivedMessage?.Invoke(this, new MessageEventArgs(finalMessage));

    });

    hubConnection.On<string>("Echo", (message) =>
    {
        var finalMessage = $"says {message}";
        OnReceivedMessage?.Invoke(this, new MessageEventArgs(finalMessage));

    });

    hubConnection.StartAsync();
    Debug.WriteLine(IsConnected);
}
Run Code Online (Sandbox Code Playgroud)

c# signalr signalr-hub xamarin.forms

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

如何在 .net core 项目中使用 SignalR Core 收听 postgresql 数据库?

我正在研究 .net 核心 Web 应用程序。我想听听我的 PostgreSQL 数据库。如果桌子上有任何变化,我必须得到它。

所以根据我的研究,我必须使用 SignalR Core。我用 SignalR 做了一些示例应用程序,比如聊天应用程序,但没有一个听数据库。我找不到任何例子。

- 是否必须在 PostgreSQL 数据库上触发?

-它必须是代码端的监听器吗?

- 如何使用 SignalR 核心?

请给我一个方法。

非常感谢。

postgresql signalr signalr-hub asp.net-core asp.net-core-signalr

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

如何在 Visual Studio 的 Azure Functions 应用程序中调用和调试 SignalRTrigger 函数

我正在按照本指南使用 SignalR 触发器绑定构建我的第一个 Azure Function App 。我已经在 Azure 中设置了 Function App 和 SignalR 服务。

但现在我需要调试我的 SignalR 触发函数之一。我尝试使用本地函数主机 (func.exe) 使用 Visual Studio 2022 来执行此操作,只需在我的 Azure Functions 项目中按 F5 即可。

我的 ServerlessHub 带有一个函数 JoinGroup,我想在 Visual Studio 中调用和调试该函数。

        namespace FunctionApp
        {
            public class SimpleChat : ServerlessHub
            {
                [FunctionName("negotiate")]
                public SignalRConnectionInfo Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)]HttpRequest req)
                {
                    var claims = GetClaims(req.Headers["Authorization"]);
                    return Negotiate(
                        claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value,
                        claims
                    );
                }

                [FunctionName(nameof(JoinGroup))]
                public async Task JoinGroup([SignalRTrigger]InvocationContext invocationContext, string connectionId, string groupName)
                {
                    throw new ApplicationException("CODE REACHED"); …
Run Code Online (Sandbox Code Playgroud)

c# signalr signalr-hub azure-functions azure-signalr

6
推荐指数
0
解决办法
596
查看次数