Tag: signalr

如何使用signalR向特定用户发送消息

我有一些signalR的问题,我无法向特定的User From Hub发送消息。 我想这样做: public void Send(string userToId, string userForId, string message) { IHubContext context = GlobalHost.ConnectionManager.GetHubContext(); //userForId – it is Session[“UserId”] context.Clients.User(userForId).updateMessages(message); } 我已经阅读过这个主题: http : //www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections ,但我不清楚,因为我没有这个var name = Context.User.Identity.Name; 我在Session变量中有用户信息,第二个是当我得到connectionId时这样: var myClientId = $.connection.hub.id; 我刷新页面或单击项目上的另一个菜单时,connectionId已更改。 我有一些问题:1)我可以在没有connectionId的情况下向特定用户发送消息(仅使用session [“UserId”])吗? 2)总的来说,如何使用SignalR轻松实现一对一的消息传递? PS我正在使用ASP.NET MVC(C#)

检查SignalR属性中的授权

我在ServiceStack上有一些服务,并在这个项目中使用SignalR。 现在,我想保护集线器连接(仅对经过身份validation的用户进行访问),但我使用ServiceStack框架身份validation..(不是asp.net身份validation)和ServiceStack的会话(在此会话中写入AuthUserId和身份validation标志)。 因此,当用户尝试连接到集线器时 – 集线器必须检查身份validation… (是的,我可以从Hub请求Cookie(例如,OnConnected方法),但在Authorize Attribute中检查身份validation – 我必须在此类(不在集线器中)中执行此操作 ( http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization ) 所以,我创建了课程 [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] public class AuthorizeMyAttribute : AuthorizeAttribute { protected override bool UserAuthorized(System.Security.Principal.IPrincipal user) { //… how can i request Cookies? / or may be can access for ServiceStack session… // and return true or false } } […]

SignalR从控制器加入组

当用户登录我的网站时,他们从下拉列表中选择他们所属的组。 在登录回发时,当他们登录时,我想将它们分配给正确的SignalR组。 根据此处的文档,我可以通过以下方式加入客户端: contosoChatHubProxy.server.joinGroup(groupName); 有没有办法从控制器分配组? 我可以称之为Hub: var hub = new NotificationHub() hub.JoinGroup(selectedGroup); 但hub方法中的Context为null。 这是可能的,还是我错误地接近了这个问题? 谢谢你的任何建议。

加载集线器时出错。 确保您的集线器引用正确,例如

有两个页面:Login.aspx和Profile.aspx,它们是使用HTML和AngularJS构建的。 login.aspx页面使用ng-view获取Login-view或Signup View的模板。 使用的代码是: 视图存储在Template文件夹中,其名称为:loginTemplate.html和signupTemplate.html。 用于处理login.aspx页面的模块是: var app_login = angular.module(‘JouralApp_login’, [‘ngRoute’,’ngAnimate’]); var app_profile = angular.module(‘GameApp’, []); app_login.config([‘$routeProvider’, ‘$locationProvider’, function ($routeProvider, $locationProvider) { $locationProvider.html5Mode(true); $routeProvider .when(‘/login’, { templateUrl: ‘Jscript_Angular/Templates/loginTemplate.html’, controller: ‘loginController’ }) .when(‘/signup’, { templateUrl: ‘Jscript_Angular/Templates/signupTemplate.html’ }).otherwise({ redirectTo:’/login’ }) }]); 现在创建了我的Profile.aspx,其HTML代码如下: {{chat}} 在尝试将SignalR集成到我的项目中之前,每件事情都运转良好。 我做了两节课: 第1类: [assembly: OwinStartup(typeof(Startup))] public class Startup { public void Configuration(IAppBuilder app) { […]

Xamarin.iOS上的SignalR – 随机无法调用Hub方法

我有一个在Azure中运行的简单Hub ,我在Windows中的控制台应用程序中完美地工作。 我刚刚构建了一个简单的测试Xamarin.iOS应用程序,它给出了一些奇怪的行为。 随机在LTE / Wifi或模拟器/设备上 – 调用集线器方法失败, There was an error invoking Hub method X 随机约50% – 一切都像Windows上的控制台应用程序一样完美 – 两者甚至互相发送消息 我在iPhone 5S和iPhone 4S上测试了这个设备。 关于为什么会这样的想法? 我在版本2.0.0上使用Portable NuGet包。 更新: 这是我启用跟踪时得到的结果(我清空了我的域名): 2013-11-25 07:47:48.204 MyApp[5163:80b] 13:47:48.1865420 – null – ChangeState(Disconnected, Connecting) 2013-11-25 07:47:49.025 MyApp[5163:6b03] 13:47:49.0247930 – d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 – SSE: GET http://mydomain.cloudapp.net/signalr/connect?transport=serverSentEvents&connectionToken=pVF6LN7KBOem7Ng2hrhx6dSByFe%2BxCr4u6RlY5V%2FtKf%2BHmOoJD5DfVpMySiUuDOaiIPlHI%2FtliqvuddvcDxnZQqi9tIYAxuyZOjYSG%2B9%2Fnx%2FQ%2B6m&connectionData=[{“Name”:”MainHub”}]&noCache=c3d54c1d-ee78-49cc-85b4-2c87a024c32a 2013-11-25 07:47:49.203 MyApp[5163:6b03] 13:47:49.2023660 – d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 – […]

SignalR:如何在页面重新加载时停止创建新连接

您好我正在开发一个聊天应用程序以及我的应用程序中的其他一些页面。 一旦我登录,我正在维护用户的会话。 我的主要目的是每当另一个用户连接到服务器时,用户应该收到通知。 我面临的问题是每当我导航到我的应用程序中的某个其他页面时,连接就会丢失。 如何停止此行为并继续连接,直到用户注销。 我在ASP.NET MVC4项目中使用SignalR 2.0,任何帮助??

SignalR:客户端断开连接

SignalR如何处理客户端断开连接? 如果我陈述以下内容,我是对的吗? SignalR将通过Javascript事件处理检测浏览器页面关闭/刷新,并将相应的数据包发送到服务器(通过持久连接); SignalR不会检测浏览器关闭/网络故障(可能只是超时)。 我的目标是长轮询运输。 我知道这个问题但想对我说清楚一点。

SignalR – 发送消息OnConnected

我今天一直在试验SignalR,它真的很整洁。 基本上我想要实现的目标如下: 设备连接后,应立即向第一个设备发送消息。 如果有超过1个连接的设备,我想发送两条消息。 除最后连接的客户端之外的所有人。 并且仅向最后连接的客户端发送一条消息。 当我将它放在自定义API控制器中并且基本上调用动作时,我一直使用的代码非常完美,但这不是我想要的。 一旦设备在OnConnected内连接而没有任何用户交互,我想发送消息,但是当我将我的代码放在OnConnected覆盖内时它停止工作。 它不再发送给特定客户端(首先连接和最后连接)。 我希望有人能够帮助我解决这个问题,因为我现在已经敲了几个小时。 public override System.Threading.Tasks.Task OnConnected() { UserHandler.ConnectedIds.Add(Context.ConnectionId, UserHandler.ConnectedIds.Count + 1); int amountOfConnections = UserHandler.ConnectedIds.Count; var lastConnection = UserHandler.ConnectedIds.OrderBy(x => x.Value).LastOrDefault(); var allExceptLast = UserHandler.ConnectedIds.Take(amountOfConnections – 1).Select(x => x.Key).ToList(); if (amountOfConnections == 1) { Clients.Client(UserHandler.ConnectedIds.First().Key).hello(“Send to only(also first) one”); } else { Clients.Clients(allExceptLast).hello(“Send to everyone except last”); […]

SignalR:加载集线器时出错

信号器不加载我的集线器: SignalR: Error loading hubs. Ensure your hubs reference is correct, eg . 我正在调用app.MapSignalR(); 在startup configuration 。 我添加到我的cshtml: $(document).ready(function () { window.hubReady = $.connection.hub.start(); });

SignalR .NET核心camelCase JSON合同解析器

使用.NET Core RC2。 有SignalR工作,但试图让它返回JSON中的camelCase属性。 对于我正在使用的API … services.AddMvc().AddJsonOptions(o => { o.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); 也许SignalR还没有任何东西(毕竟,它甚至不应该工作……),但是想知道是否有人想出来了吗? 我尝试了一些像…… services.AddTransient(); ……但没有去。 有人这个工作了吗?