Tag: signalr hub

SignalR hub中的Context为null

我有一个Web窗体应用程序和测试,以查看SignalR如何满足我的要求。 我的中心代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.AspNet.SignalR; namespace SignalRTest.Hubs { public class NotificationHub : Hub { public static readonly System.Timers.Timer _Timer = new System.Timers.Timer(); public NotificationHub() { var myInfo = Context.QueryString[“myInfo”]; _Timer.Interval = 2000; _Timer.Elapsed += TimerElapsed; _Timer.Start(); } void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e) { Random rnd = new Random(); […]

VS2012注册和dependency injection中的SignalR 2.0

我能够使用我自己的DI与SignalR 1.13一起工作: //Funq container GlobalHost.DependencyResolver = new FunqDependencyResolver(container); RouteTable.Routes.MapHubs(); 现在有了新版本2.0,我被困住了。 using Microsoft.Owin; using Owin; //SignalR 2.0 no longer uses RouteTable.Routes.MapHubs(); [assembly: OwinStartup(typeof(SignalRChat.Startup))] namespace SignalRChat { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } } (VS2013中的新SignalR 2.0设置截图) 首先,它是VS2013的屏幕。 我的VS2012 Pro没有Create New …-> OWIN Startup类。我手写了一个。 但是现在我如何调用新的启动类来替换旧的MapHub()函数? 其次,我正在使用运行其余Web项目的DI。 我如何现在将signalR注册到我的DI? 编辑——————————————– 问题还有一点。 我在Global.asax.cs-> Application_Start()中创建了我的DI容器,但是自动创建并调用了SignalR Startup.cs-> […]

是否可以在SignalR集线器方法中返回预编码的JSON字符串?

在MVC项目中,我在类似于此的集线器上有一个方法: public string Foo() { return DoCrazyThingThatReturnsJson(); } 不幸的是,SignalR(或其他东西)接受编码的JSON字符串并愉快地对其进行编码,然后将其返回,因此浏览器就像LOLWTF。 有没有办法跳过第二次编码?

SignalR 2长轮询“协议”请求在未在本地运行时超时

目前我有一个非常健谈的应用程序,需要得到Singleton的支持(参见下面的代码)。 我升级到SignalR 2.0并遵循升级指南,但在将其部署到环境后,有时所有对“协议”的请求都会失败,信号器会中断,当它没有中断时,推送速度非常慢从服务器向客户端发送通知,也许这与使用长轮询有关? 这是我的服务器端代码的样子。 Owin中的配置方法启动类 var hubConfig = new HubConfiguration(); hubConfig.EnableDetailedErrors = true; GlobalHost.DependencyResolver.UseSqlServer(ConfigurationManager.AppSettings[“ConnectionString”].ToString()); app.MapSignalR(hubConfig); 如您所见,我正在使用SQL背板。 这是我的Hub的样子 public class MyHub : Hub { public void JoinGroup(int someId) { Groups.Add(Context.ConnectionId, someId.ToString()); } public void LeaveGroup(int someId) { Groups.Remove(Context.ConnectionId, someId.ToString()); } } 这里要说的另一点是我正在使用群组。 这可能是问题的一部分,我注意到群组似乎让事情变得更慢,好像信号器正在等待群组中的所有用户在推出通知后完成。 我的Singleton看起来像这样。 public class Broadcaster { private readonly static Lazy _instance = new Lazy(() […]

SignalR从控制器加入组

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

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 – 发送消息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 – 如何在集线器中执行异步任务?

我正在尝试使用C#5异步/等待function创建SignalR应用程序,但每当代码运行时,它将抛出System.InvalidOperationException。 这是重现问题的最简单的代码。 public class SampleHub : Hub { public Task GetGoogle() { var http = new WebClient(); return http.DownloadStringTaskAsync(“http://www.google.com”); } } 例外细节: 此时无法启动异步操作。 异步操作只能在异步处理程序或模块中启动,或者在页面生命周期中的某些事件中启动。 如果在执行页面时发生此exception,请确保将页面标记为。 堆栈跟踪: at System.Web.AspNetSynchronizationContext.OperationStarted() at System.Net.WebClient.DownloadStringAsync(Uri address, Object userToken) at System.Net.WebClient.DownloadStringTaskAsync(Uri address) at System.Net.WebClient.DownloadStringTaskAsync(String address) 在客户端,Javascript看起来像这样。 $.connection.hub.start().done(function () { $(‘#google’).click(function () { var google = sample.server.getGoogle(); console.log(google); }); }); 我做错了什么? 有没有解决方法? […]

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(); });