如何在HubConnection SignalR Core中发送参数/查询
我正在尝试将参数添加到Signalr的连接中. 我正在使用建筑商来创建我的客户端连接并启动它: var connection = new HubConnectionBuilder() .WithUrl("http://10.0.2.162:5002/connection") .WithConsoleLogger() .WithMessagePackProtocol() .WithTransport(TransportType.WebSockets) .Build(); await connection.StartAsync(); 我想在此连接中发送一个简单的参数: 类似: " token":" 123" 在我的服务器端,我认为我可以从httpcontext获取此参数: public override Task OnConnectedAsync() { var htt
0 2024-04-17
编程技术问答社区
如何使AutoFac在每个顶层对象中使用相同的嵌套依赖实例?(SignalR dependency injection per hub)
我试图以此测试的方式来设置我的AutoFac注册: [Test] public void Autofac_registration_test() { // Given var builder = new ContainerBuilder(); RegisterServices(builder); var container = builder.Build(); // When var firstHub = container.Resolve(); var secondHub = container.Resolve(); // Then firstHub.Should().NotBe(secondHub); firstHub.FooRepo.Context.Should().Be(firstHub.BarRepo.Context); firstHub.FooRepo.Con
0 2024-04-17
编程技术问答社区
通过SignalR核心访问DB上下文
我正在使用aspnetcore.signalr,我需要有关如何通过轮毂访问SQL Server数据库的建议.关于这一点没有很多资源.我知道如何添加单身人士,但我不知道稍后如何访问它.如何访问使用configuration.getConnectionstring在我的轮毂任务中定义的DB上下文? ? 谢谢. 这是相关代码: startup.cs public void ConfigureServices(IServiceCollection services) { services.Configure(options => { options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.Ad
0 2024-04-16
编程技术问答社区
在ASP.Net Boilerplate中,从应用服务层调用一个SignalR Hub是一种不好的做法吗?
我正在使用ASP.NET CORE 2.1的ASP.NET样板模板. 我在Web.Core组装中实现了一个集线器,并创建了一个控制器. 我可以从任何客户端向我的集线器订阅/通知数据,这不是我的问题. 我想在应用程序服务层中使用此中心,但是默认情况下,Application Services层不引用SignalR. 所以我的问题是: 在应用程序服务层中引用SignalR是一个不好的做法吗? 预先感谢! 问候, Pierre-luc 解决方案 直接依赖Web功能并不是应用程序层中的好练习.因为,它被认为是独立的演示层. 我认为您有一些选择; 如果您认为自己永远不会更改SignalR,并且永远不会从另一个应用程序中使用应用程序层,则可以直接引用SignalR并使用它.但是,这应该是最坏的情况. Abstract SignalR通信(定义接口)在应用程序层中并在Web层中实现.在这种情况下,最好在应用程序层中定义null实现(如果不知道,搜索"
0 2024-04-15
编程技术问答社区
SignalR .NET客户端-解析数值时遇到意外的字符
我正在尝试设置一个.NET客户端,以将消息从我的服务层发送到我的SignalR Hub.我正在遵循本指南:这就是我所拥有的: _hubConnection = new HubConnection(_baseUrl); // "http://localhost:3806" _hubProxy = _hubConnection.CreateHubProxy("AppHub"); _hubConnection.Start().Wait(); 集线器生活在同一项目的内部 - 它是带有表单身份验证的MVC应用程序. 我永远无法克服.Wait()呼叫,它总是会出现以下错误: Message=Unexpected character encountered while parsing value:
0 2024-04-15
编程技术问答社区
如何从外部调用一个SignalR中心方法?
这是我的Hub代码: public class Pusher : Hub, IPusher { readonly IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext(); public virtual Task PushToOtherInGroup(dynamic group, dynamic data) { return _hubContext.Clients.Group(group).GetData(data); } } 我想在另一个项目中调用此方法: var pusher = new Pusher.Pusher(); pusher.PushToOtherInGroup("Test", new {exchangeTypeId, price}); 我要呼叫PushToOtherInGroup,当调用方法时,我不会遇到
0 2024-04-14
编程技术问答社区
如何在.NET Core中使用IUserIdProvider?
本文使用iuseridProvider接口进行了描述.它显示了如何使用globalhost使SignalR使用您的用户ID提供商.但是.NET核心的SignalR没有全球主机.什么是替代品? 解决方案 您需要实现public class MyCustomProvider : IUserIdProvider { public string GetUserId(HubConnectionContext connection) { ... } } 然后,您需要在Startup中注册它以进行依赖注入: public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); services.AddSingleton(); } Then SignalR will use your UserIdP
0 2024-04-13
编程技术问答社区
向signalr中的特定用户发送消息
我有信号服务器(控制台应用程序)和客户端应用程序(ASP.NET MVC5) 如何将消息发送给OAuth成员中的特定用户. 实际上,我无法使用Hub请求上下文来解决发件人用户. Context.User.Identity.Name 我的轮毂 public class UserHub : Hub { #region Hub Methods public void LoggedIn(string userName, string uniqueId, string ip) { Clients.All.userLoggedIn(userName, uniqueId, ip); } public void LoggedOut(string userName, string uniqueId, string ip) { var t = ClaimsPrincipal.Current.Iden
4 2024-04-13
编程技术问答社区
SignalR无法读取未定义属性的客户端
我正在尝试将Signalr添加到我的项目(ASPNET MVC 4).但是我无法使它起作用. 在下图中,您可以看到我收到的错误. 我已经阅读了很多Stackoverflow帖子,但是它们都没有解决我的问题. 这是我到目前为止所做的: 1) Ran Install-Package Microsoft.AspNet.SignalR -Pre 2) Added RouteTable.Routes.MapHubs(); in Global.asax.cs Application_Start() 3) If I go to http://localhost:9096/Gdp.IServer.Web/signalr/hubs I can see the file content 4) Added to Web.Config 5) Created folder Hubs in t
0 2024-04-13
编程技术问答社区
SignalR-在另一个项目的枢纽上从枢纽以外的地方进行广播
我的解决方案中有两个项目: 项目1:" SignalRchat"(MVC) - 工作正常 项目2: " DatabaseWatcherService" Windows Service-工作正常 我正在尝试通过Windows服务打电话给我的SignalRchat Hub,但它似乎不起作用. 这是我从Windows服务中调用我的集线器的地方( https://github.com/signalr/signalr/wiki/hubs#broadcasting-over-a-hub-a-hub-from-from-from-unside-of-a-hub ): void PerformTimerOperation(object sender, EventArgs e) { eventLog1.WriteEntry("Timer ticked..."); var message = "test"; var con
0 2024-04-12
编程技术问答社区
如何使用SignalR Hubs从服务器向客户端发送消息
我刚刚开始探索Signalr,我希望能够将消息从服​​务器发送给所有客户端. 这是我的枢纽 using System; using System.Collections.Generic; using System.Linq; using System.Web; using SignalR; using SignalR.Hubs; using SignalR.Hosting.Common; using SignalR.Hosting.AspNet; using System.Threading.Tasks; namespace MvcApplication1 { public class Chat : Hub { public void Send(String message) { // Call the addMessage methods on all clients Clie
0 2024-04-12
编程技术问答社区
SignalR OnDisconnected--处理聊天室 "用户在线 "的可靠方式?
我正在实施聊天室.到目前为止,很好 - 用户可以通过JS客户端从浏览器发送消息,我可以使用C#客户端执行相同的操作 - 这些消息会向其他用户广播.现在,我正在尝试实现"在线用户". 我的方法如下: OnConnected - 更新DB中的用户为isonline = true OnDisconnected - 如果用户没有任何其他连接,请将DB中的用户更新为IsOnline = false 我正在将状态存储在数据库中,因为无论如何我都必须查询DB的用户缩略图 - 这似乎是与Hub中的词典合作的简单替代方法. 我遇到的问题是,OnDisconnected并不总是为每个客户端ID打电话 - 陈旧的连接阻止"如果用户没有其他连接",从而解决到true,所以用户始终是"在线". 我能想到的一个hacky解决方案是始终将用户设置为OnDisconnect上的db中脱机 - 但这意味着,如果用户打开两个选项卡并关闭一个,则将是"离线".然后,我可以将用户重新设置为在线发送发
0 2024-04-12
编程技术问答社区
信号R-获取用户名
我正在使用SignalR和ASP.NET MVC3来构建示例聊天应用程序.这是我的Signalr Hub的样子 public class MyHub:Hub,IDisconnect { public Task Join() { string username = HttpContext.Current.User.Identity.Name; //find group based on username string group = getGroup(username) return Groups.Add(Context.ConnectionId, group); } public void doStuff() { string group = getGroup(); Clients[group].doStuffOnBrowser(); } } 我的问题是当页面加载时,我的应用程序崩溃了.在使用调试器踏上踏板时,我发现httpcontext.
0 2024-04-12
编程技术问答社区
从系统中的其他地方调用SignalR中心客户端
我已经设置了一个SignalR Hub,可以在服务器和客户端之间进行通信.集线器服务器端代码存储在名为Hooking.cs的类中.我想要的是能够调用hooking.cs中定义的方法,以允许我从应用程序中的任何地方向任何连接的客户端广播消息.似乎为每个客户端/服务器调用创建了一个新的Hooking.cs实例,因此我希望我能够使用 之类的东西 var hooking = new Hooking(); hooking.Test(); 使用hooking.cs中定义的方法test(),例如 public static void Test() { Clients.test() } 和客户端JavaScript var hooking = $.connection.hooking; hooking.test = function() { alert("test worked"); }; $.connection.hub.start() 不幸的是,这并不是那么简单,
0 2024-04-12
编程技术问答社区
使用SignalR和IProgress接口的进度报告
我有一个集线器类,它具有长期运行的方法,我需要在工作时显示进度栏. 我阅读 我认为可以在异步方法中使用Iprogress接口来发送长期运行的操作状态. 我写这样的方法: public async Task GetServerTime(IProgress prog) { await Task.Run(() => { for (int i = 0; i
0 2024-04-12
编程技术问答社区
使用GlobalHost.ConnectionManager.GetHubContext从集线器外部调用客户端方法的SignalR不起作用。但是从集线器内部调用却可以
我正在尝试从.NET Web API控制器操作中调用客户端方法. 我可以这样做吗? 我唯一能找到与我想要做的接近的帖子是: signalr + sigralr + porting通过操作方法给集线器的消息 在其中使用globalhost.connectionmanager.gethubcontext. 当我在Web API操作中尝试它时,不会抛出任何错误,但是在客户端端从未调用过" MethodInjavascript"方法. Public ActionResult MyControllerMethod() { var context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.All.methodInJavascript("hello world"); // or context
0 2024-04-12
编程技术问答社区
Signalr/Hub在IIS 7中无法加载,但在Visual Studio中可以正常工作
我正在使用Signalr的ASP .NET 4.0框架上的Web应用程序进行工作,该框架已从Nuget软件包安装了它.当我在不本地调试的情况下调试或运行应用程序时,它可以正常工作.但是,当将其部署到生产服务器上时,无法找到正在动态注入Httphandlers的signal/hubs文件.由于它的动态性质,它必须是随时创建的,因此我不能仅将工作文件复制到项目中. 我尝试了以下加载文件的方法: 以及背后的代码: ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("~/signalr/hubs")); 所有这些在本地工作,但在服务器上不工作. HTML中渲
0 2024-04-11
编程技术问答社区
重新连接SignalR 2.0 .NET客户端和服务器集线器的最佳实践
我正在移动应用程序中使用.NET客户端的Signalr 2.0,该应用程序需要处理各种类型的断开连接.有时,SignalR客户端会自动重新连接 - 有时必须通过再次调用HubConnection.Start()直接重新连接. 由于SignalR神奇地自动连接在某些时候,我想知道我是否缺少功能或配置设置? 设置自动重新连接的客户端的最佳方法是什么? 我已经看到了处理Closed()事件的JavaScript示例,然后在n秒后连接.有什么建议的方法吗? 我已经阅读了文档以及有关信号连接寿命的几篇文章,但我仍然不清楚如何处理客户端重新连接. 解决方案 我终于弄清楚了.自从开始这个问题以来,这就是我学到的: 背景:我们正在使用Xamarin/Monotouch和.NET Signalr 2.0.3客户端构建iOS应用程序.我们正在使用默认的SignalR协议 - 它似乎正在使用SSE而不是Web插座.我不确定是否可以使用Xamarin/Monotouch使用
0 2024-04-11
编程技术问答社区
SignalR-检查用户是否仍在连接中
我有一个带有方法的集线器,称为客户端.此方法启动了一个计时器,该计时器每10秒运行一次.由于如果没有人连接到集线器,继续运行此代表是没有意义的,所以我想检查在重新安排它之前是否仍在代表内连接任何用户.有什么方法可以做到吗? 解决方案 可能最常用的解决方案是保留一个静态变量,其中包含当前连接的用户和覆盖OnConnect和OnDisconnect或实现IDisconnect,具体取决于您使用的版本. 您将实施这样的事情: public class MyHub : Hub { private static List users = new List(); public override Task OnConnected() { users.Add(Context.ConnectionId); return base.OnConnected(); } //SignalR
0 2024-04-11
编程技术问答社区
SignalR不在服务器上使用Session
当我尝试从轮毂访问HttpContext当前会话时,它将返回null. 我尝试使用接口IRequiresSession,但它不起作用.有人可以帮我吗? 解决方案 Signalr Connections(包括客户端所有集线器操作的连接)不支持会话状态.如果您愿意,您可以启用它,但是我们强烈建议您反对它,因为会话状态访问序列化给定客户端的请求,这意味着您将不再从Signalr双面邮件中获得好处,因为一个请求将阻止另一个请求,例如.在长期的投票运输中,接收连接将阻止任何发送的尝试. 其他解决方案 您可以简单地维护自己的会话,例如,在内存缓存中使用,HTTP是无状态的,因此服务器需要会话来维护客户端,但是Web插座是保持靠近的连接,服务器与客户端保持联系,通过默认不需要这样的事情,例如httpcontext会话. 其他解决方案 我解决了隐藏字段的同一问题,如下所示: 在ASPX页面上添加了ASP HiddenField. 在页面加载上分配了会话值(在我的情况
0 2024-04-11
编程技术问答社区