我无法获得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的事情. ..
我正在寻找关于如何在自托管(非IIS)环境中运行的后端服务上实现SignalR的授权安全性的一些指导,该环境是从Web应用程序调用的.后端应用程序基本上是一个监视器,可以将SignalR事件激发回基于HTML的客户端.这一切都很好(实际上非常好).
但是,我们需要从Web站点限制对经过身份验证的用户的服务器访问.所以基本上如果用户在网站上进行了身份验证,我们需要在后端应用程序中以某种方式获取凭据(用户名就足够了)和验证状态,以决定是否允许连接以避免未经授权的访问.
任何人都可以指出如何完成这种授权转发的一些策略或模式?
我在 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) 是否可以在不执行停止和启动的情况下更改SignalR连接上的查询字符串?
我这样做:
$.connection.hub['qs'] = {arg1: 'kkkk', arg2: 'xxx',...};
$.connection.hub.stop();
$.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)
这种停止/启动导致我的系统将其解释为连接中断,出于多种原因这是不可取的.
当我删除它时,使用较旧的查询字符串参数调用方法.
我有一个 ASP.Net MVC 应用程序,我已将 SignalR 添加到其中。在遵循“入门”教程(当然进行了修改,因为它出现在我的应用程序中)之后,我让它在本地主机上运行。但是一旦进入生产环境,就会出现以下错误:
与“ws://xxxxx/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=xxxxx”的 WebSocket 连接失败:连接在收到握手响应之前关闭。
我可以访问/signalr/hubs(我得到一个js文件)。关于为什么会发生这种情况有什么想法吗?
我正在处理我正在研究的SignalR项目的问题.我正在尝试使用.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
我使用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应用程序,我能够在实时服务器上进行通信.
为什么以下代码无法将我连接到集线器?
****我没有使用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) 我正在研究 .net 核心 Web 应用程序。我想听听我的 PostgreSQL 数据库。如果桌子上有任何变化,我必须得到它。
所以根据我的研究,我必须使用 SignalR Core。我用 SignalR 做了一些示例应用程序,比如聊天应用程序,但没有一个听数据库。我找不到任何例子。
- 是否必须在 PostgreSQL 数据库上触发?
-它必须是代码端的监听器吗?
- 如何使用 SignalR 核心?
请给我一个方法。
非常感谢。
postgresql signalr signalr-hub asp.net-core asp.net-core-signalr
我正在按照本指南使用 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)