Tag: signalr

如何使用Azure Worker Role和OWIN扩展SignalR

SignalR使用Azure Web角色非常精确地扩展。 但是,当我在Azure辅助角色中使用自托管OWIN项目时,SignalR将在添加多个实例时开始出现问题。 为了记录,我的项目使用Redis作为背板。 将Azure辅助角色实例增加到一个以上时,客户端连接将随机失败,并显示错误“ConnectionId格式不正确” 。 我认为这是由于负载均衡导致单个客户端的协商跨越多个服务器时引起的; 我不相信参与协商的多个服务器可以解密数据(DPAPI在封面下?)。 我尝试在app.config中设置 validationKey和decryptionKey,但这似乎没有什么区别; 问题依然存在。 同样,该项目将作为Web角色(IIS)正常工作,但不能作为工作者角色(OWIN自托管)。 假设这是DpapiDataProtectionProvider的问题,我如何确保提供程序在多个服务器/实例之间呈现相同的加密/解密结果? 解 SignalR(DpapiDataProtectionProvider)使用的默认保护提供程序似乎不支持Azure Worker Role scaleout。 通过滚动我自己的示例提供程序,我能够扩展SignalR / OWIN / Azure Worker并且不会收到随机400 HTTP /“ConnectionId的格式不正确”。 请记住,以下示例不会保护/保护令牌。 public class ExampleDataProvider : IDataProtector { public byte[] Protect(byte[] userData) { Trace.TraceInformation(“Protect called: ” + Convert.ToBase64String(userData)); return userData; } public byte[] Unprotect(byte[] protectedData) { Trace.TraceInformation(“Unprotect called: ” + […]

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(); […]

MVC4 SignalR“signalr / hubs”501未实现错误

更新:切换到IIS Express而不是Visual Studio开发服务器修复了501错误。 我正在尝试让SignalR在我的MVC4应用程序中工作,但我遇到了一个奇怪的501错误。 我已经按照几个不同的教程,但结果总是一样的。 任何帮助,将不胜感激。 我正在使用Visual Studio 2012 Pro RC,我通过包管理器控制台安装了SignalR 0.5.1。 我的代码: 布局 视图 $(function () { // capture the client IP var clientIp = $(“#clientip”).val(); // create the SignalR proxy var userlink = $.connection.userlink; // create our callback for the proxy userlink.updateViewCount = function (message) { $(‘#view-updates’).html(” + message + ”); }; // […]

显示div中的用户名列表

我是jQuery的新手。 在我的项目中,我创建了一个类User ,其代码如下所示: static ConcurrentDictionary _users = new ConcurrentDictionary(); // // some function to add values to _users list // public List GetConnectedUsers() { return _users.Values.ToList(); } 我想在div #showUsernames中显示这个值列表。 如何使用jQuery做到这一点? 我试过下面没有显示任何东西 /*display your contacts*/ $(‘#showUsernames’).append(function(){ chat.server.getConnectedUsers(); }); 其中chat.server (signalr)调用服务器端代码(Chat类).. 我认为解决方案与signalr无关。 如果上面的描述不够,那么你可以在这里查看我的代码 编辑: User.cs public class User { public User(string ConnID, string Username) { Name = […]

如何使信号器客户端避免表单身份validation?

我的MVC网站在web.config中有一个表单授权。 现在所有页面都需要传递授权,以便可以查看它们。 但是现在我有一个控制台程序(C#控制台程序)。这个程序需要向SignalR Hub发送一些消息。 但我的signalR Hub在我的MVC网站上,现在这个C#控制台客户端无法向Signal Hub发送消息,因为我的MVC网站有表单授权。 我希望控制台客户端不需要validation,但需要validation网站中的页面。 我该怎么处理网站的web.config文件??? –> 这样,我只能让pageone不需要validation,但它不适用于signalR客户端程序 有我的web.config文件

带有Redis背板的SignalR在F5后面 – StatusCode:400,ReasonPhrase:’Bad Request’

我在Server 2012 R2,启用了WebSockets的IIS 8.5上使用SignalR版本2.1.2和SignalR.Redis 2.1.2。 一切都在我的开发环境中完美运行。 我甚至可以在配置为使用相同背板的站点的不同服务器(例如,http machine1 / myapp / signalr,http machine2 / myapp / signalr)上站起来,并且两个UI都可以完美地向他们发送消息。 然后我将“myapp”移动到我们的下一个环境,这是一个由2台机器组成的集群,它们位于F5负载均衡器后面,使用dns别名设置路由到F5,然后循环“myapp”。 网站本身可以很好地连接到信号器,并且可以接收它订阅的已发布消息,但是当我尝试通过别名发布到网站时(例如http myappalias / signalr),我得到400,Bad Request错误响应。 这是一个错误的例子。 InnerException: Microsoft.AspNet.SignalR.Client.Infrastructure.StartException _HResult=-2146233088 _message=Error during start request. Stopping the connection. HResult=-2146233088 IsTransient=false Message=Error during start request. Stopping the connection. InnerException: System.AggregateException _HResult=-2146233088 _message=One or more errors occurred. HResult=-2146233088 IsTransient=false Message=One or […]

如何设置C#winforms应用程序来托管SignalR Hubs?

我已阅读SignalR文档并观看了一些video,但我无法让SignalR在winforms应用程序中托管。 我尝试过在SignalR wiki上使用源代码: https : //github.com/SignalR/SignalR/wiki/Self-host 如果你看一下“Full Sample – Hubs”,那么“server”变量是什么? 我不明白这是如何工作的或如何将其转换为C#。 根据维基“默认的SelfHost实现是基于HttpListener构建的,可以托管在任何类型的应用程序中(控制台,Windows服务等)。” 我想在C#中托管SignalR并在asp.net中使用它。 有谁可以请我解释一下这个问题?

使用SignalR Hubs,连接会在一段时间后丢失 – 为什么?

在我的SignalR应用程序中,回调在页面上按预期触发。 如果页面停留一段时间,则在刷新之前不再在该页面上调用回调。 我怀疑这可能是由于网站的会话到期(使用客户端的会话ID来调用客户端通知)。 我在这里阅读了关于KeepAlivefunction的信息,并且可以在SignalR代码中看到它的一些引用。 我不清楚是否需要实施客户端keep-alive,如果需要,如何实现?

使用MVC4向特定客户端发送SignalR推送通知

我正在尝试将SignalR与MVC4 c#项目一起使用,仅向所选客户端发送推送通知。 为此,我通过在c#静态变量中存储’Context.ConnectionId’来使用’context.Clients.Client’,因为无法使用与signalr的会话}。 但是因为’contextConnectionId’是一个静态变量; 邮件仍然发送给所有客户:( 是否有任何替代会话与信号或任何其他优雅的方式来做到这一点? (发现很少相关的post,但没有具体的答案) 代码如下: 的javaScript $(document).ready(function (){ { var chat = $.connection.PushNotify; chat.client.addNewMessageToPage = function (type, message) { if(type == “something”) { alert(message); } } // Start the connection. $.connection.hub.start().done(function () { chat.server.send($(”).val(), $(”).val()); }); )} 在c#HUB [HubName(“PushNotify”)] public class PushNotify : Hub { public void Send(string name, string message) { […]

Autofac – 带有OWIN的SignalR。 获取对ContainerBuilder的引用

我有一个使用Autofac的现有MVC 4应用程序,我有其他具有autofac模块的程序集。如果没有SignalR / autofac集成,我的应用程序就IOC而言是完美的。 我添加了SignalR集线器,我试图通过构造函数注入依赖项。 我已经按照文档并实现了代码示例。 http://autofac.readthedocs.org/en/latest/integration/signalr.html 这导致以下课程: public class SignalRConfig { public void Configuration(IAppBuilder app) { var builder = new ContainerBuilder(); var config = new HubConfiguration(); Assembly thisAssembly = typeof(SignalRConfig).Assembly; builder.RegisterHubs(thisAssembly); var container = builder.Build(); config.Resolver = new AutofacDependencyResolver(container); app.UseAutofacMiddleware(container); app.MapSignalR(“/signalr”, config); } } 这与添加到我的AssemblyInfo.cs的这一行联系起来 [assembly: OwinStartup(typeof(SignalRConfig))] 但它不能在运行时工作,因为我的集线器没有无参数构造函数,它无法解决依赖关系。 我的假设是我正在创建一个新的ContainerBuilder(根据文档)并且该实例没有注册任何内容。 我实际上想要对我知道所有已注册类型的模块传递的ContainerBuilder的引用。 我只是不知道该怎么做。 现有的IOC代码从global.asax上的application_start运行,SignalRConfig同时运行。 我不想把ContainerBuilder放在单件中,因为它感觉很脏,但我找不到任何其他解决方案。 这是我的nuget包配置的一部分,显示了版本号等