asp.net-mvc – Signalr从集线器外部调用特定客户端
我知道
Chris Fulstow project log4net.signalr,如果你想要一个非生产日志,这是一个好主意,因为它记录了所有请求的所有消息.我希望有一些东西可以通过发起它们的请求来区分日志消息并将其发送回适当的浏览器.
这是我在appender中所做的: public class SignalRHubAppender:AppenderSkeleton { protected override void Append(log4net.Core.LoggingEvent loggingEvent) { if (HttpContext.Current != null) { var cookie = HttpContext.Current.Request.Cookies["log-id"]; if (null != cookie) { var formattedEvent = RenderLoggingEvent(loggingEvent); var context = GlobalHost.ConnectionManager.GetHubContext<Log4NetHub>(); context.Clients[cookie.Value].onLog(new { Message = formattedEvent,Event = loggingEvent }); } } } } 我正在尝试将会话ID附加到cookie,但这不能在同一台机器上运行,因为cookie会被覆盖. //start hubs $.connection.hub.start() .done(function () { console.log("hub subsystem running..."); console.log("hub connection id=" + $.connection.hub.id); $.cookie("log-id",$.connection.hub.id); log4netHub.listen(); }); 因此,只连接的最后一页显示日志消息.我想知道是否有一些策略可以从浏览器获取当前连接ID,如果有的话. 编辑 我可以创建一个基于会议名称的cookie(比如log-id-someguid),但我想知道是否有更聪明的东西. BOUNTY 解决方法
关于如何正确定位正确的浏览器实例/选项卡的想法,即使在同一SPA上打开多个选项卡,也是通过Url区分它们.实现这种方法的一种可能方法是在第一次访问时从
http://foo.com重定向到
http://foo.com/hhd83hd8hd8dh3,每次随机生成.网址重写也可以通过其他方式完成,但这只是一种说明问题的方法.通过这种方式,appender将能够检查原始Url,并且通过一些映射,您可以保留服务器端,从而可以识别正确的SignalR ConnectionId.实现细节可能有所不同,但基本思路就是这个.跟踪HttpContext中可用的更多信息,因为第一次连接您还可以实施其他策略以防止任何劫持.
关于你的架构,我可以告诉你,这正是我在ElmahR中使用它的方式.我的消息源自通知中心外部(从其他Web应用程序发布的错误),我向连接到该集线器的所有客户端进行广播(并订阅某些组):它工作正常. 我不是一个权威的来源,但我也猜测这样的架构是可以的,即使有多个集线器,因为在一天结束时的集线器只是一个(一个)持久连接的抽象,它允许你通过上下文.在幕后(我正在简化)你只是一个持续的消息来回连接,所以无论你在它上面定义什么集线器结构(这只是为了帮助你组织事情)你仍然坚持这种连接,所以你不能做任何伤害. SignalR擅长做两件事:大规模广播(客户端)和一对一通信(来电者).只要你不尝试做一些奇怪的事情,比如建立对特定呼叫者的服务器端引用,你应该没问题,无论有多少个集线器,以及它们之间的交互,你都有. 这些是我的结论,来自该领域.也许你可以将@dfowler关于这个问题,看看他是否有更多权威的指导方针. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何从TableAdapter中检索存储过程返回值
- asp.net – 汇总历史正常运行时间数据
- asp.net-mvc – 用于多个复选框表单的ASP.Net MVC6语法
- asp.net-mvc – ASP.NET MVC DropDownListFor不支持SelectL
- asp.net-mvc – 如何使用Asp.Net MVC框架创建Master-Detail
- asp.net – HTML5编辑器从微软词语粘贴时丢失格式
- asp.net – 什么是Eval(“this”)的正确等价物
- ASP.net MVC – 在区域之间共享部分
- asp.net – 如何在gridview中只显示日期而不是datetime?
- asp.net-mvc-3 – System.Web.Mvc.HtmlHelper’不包含’Act
- ASP.Net MVC – 从HttpPostedFileBase读取文件,而
- asp.net-mvc – asp.net mvc 3 webgrid排序依然?
- asp.net – web.config文件设置是否覆盖IIS设置?
- asp.net-mvc – 允许Anonymous在asp.net mvc 3中
- 我到底是什么时候需要在经典的asp中将对象设置为
- ASP.NET MVC和FubuMVC之间的主要区别是什么?
- asp.net-mvc – SQL CE 4.0还是SQL Express?果园
- 在(asp.net wcf)Web应用程序中存储文件的最佳方法
- asp.net-mvc – ASP.NET MVC 2 RC区域和共享模型
- asp.net-mvc – 在mvc 4上获取当前文化或浏览器区