Tag: signalr

尝试浏览信号器/集线器时,HTTP 503服务不可用

我在VS2012中创建了一个Windows托管的SignalR集线器: public class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR(); } } public static class SignalR { public static void Start() { const string url = “http://*:8080”; WebApp.Start(url); } } public class Broadcaster : Hub { public void SendDownloadResult(bool result, string device, string description, string connectionId, string task) { var context = GlobalHost.ConnectionManager.GetHubContext(); […]

signalR – 获取用户名

我正在使用signalr和asp.net MVC3来构建示例聊天应用程序。 这是我的信号器中心的样子 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(); } } 我的问题是我的应用程序在页面加载时崩溃了。 在使用调试器时,我发现即使用户已经过身份validation,HttpContext.Current.User.Identity.Name仍为null。 如何在Task Join()方法中获取用户名?

SignalR – 从集线器外部通过另一个项目中的集线器进行广播

我的解决方案中有两个项目: 项目1:“SignalRChat”(MVC) – 工作正常 项目2:“DatabaseWatcherService”Windows服务 – 工作正常 我正试图从我的Windows服务中调用SignalRChat Hub,但它似乎没有工作。 这是我通过Windows服务调用我的Hub的地方( https://github.com/SignalR/SignalR/wiki/Hubs#broadcasting-over-a-hub-from-outside-of-a-hub ): void PerformTimerOperation(object sender, EventArgs e) { eventLog1.WriteEntry(“Timer ticked…”); var message = “test”; var context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.All.addNewMessageToPage(message); } 尝试连接时出现以下错误: 消息=远程服务器返回错误:(500)内部服务器错误。 我正在尝试通过var connection = new HubConnection(“http://localhost:2129”); 端口2129是我运行的MVC项目。

在Owin启动类中指定域

我创建了一个自托管Owin / SignalR应用程序,代码类似于本教程中的代码: SignalR Self Host Tutorial 一切正常,但出于安全考虑,我想将其限制为仅允许来自特定远程站点的消息。 换句话说,我想替换“app.UseCors(CorsOptions.AllowAll);” 使用代码来限制应用程序仅响应来自我定义的URL的消息,即仅允许来自http://www.remote_site.com等的消息。 有没有简单的方法来做到这一点? 作为参考,这是我的SignalR启动类的代码: using System; using Microsoft.AspNet.SignalR; using Microsoft.Owin.Hosting; using Owin; using Microsoft.Owin.Cors; namespace SignalRSelfHost { public class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR(); // How do I only allow a specific URL instead of the “CorsOptions.AllowAll” option? } } }

如何使用SignalR Hub将消息从服​​务器发送到客户端

我刚刚开始探索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 Clients.addMessage(message); } } } 这是我的客户页面 $(function () { //Proxy created on the fly […]

SignalR OnDisconnected – 为聊天室处理“用户在线”的可靠方式?

我正在实施一个聊天室。 到目前为止,这么好 – 用户可以通过JS客户端从他们的浏览器发送消息,我可以使用C#客户端做同样的事情 – 这些消息被广播给其他用户。 现在,我正在尝试实施“在线用户”。 我的方法如下: OnConnected – 将数据库中的用户更新为IsOnline = true OnDisconnected – 如果用户没有任何其他连接,请将db中的用户更新为IsOnline = false 我正在将状态存储在数据库中,因为我必须在数据库中查询用户缩略图 – 这似乎是在集线器中使用字典的简单替代方法。 我遇到的问题是OnDisconnected并不总是为每个客户端ID调用 – 过时的连接阻止“如果用户没有任何其他连接”位解析为true,那么用户总是“线上”。 我能想到的一个hacky解决方案是在OnDisconnect上始终将用户设置为脱机 – 但这意味着如果用户打开两个选项卡并关闭一个选项卡,它们将“脱机”。 然后,我可以将用户重新设置为联机以获取发送的每条消息,但这似乎完全浪费了处理周期,并且仍然留下了一段时间,当用户真正在线时,用户被视为离线。 我相信如果有办法保证为每个客户端调用OnDisconnected,这个问题就会消失。 好像我让客户端打开很长时间(> 10分钟)然后断开连接, OnDisconnected永远不会被调用。 我会尽力确定repro步骤并保持更新。 那么 – 这是处理在线状态的有效方法吗? 如果是这样,还有什么方法可以确保OnDisconnected最终为每个连接触发? 这个问题让我担心,因为现有的Connections会随着时间的推移而继续增长,如果我没有弄错的话,最终由于未处理的状态连接而溢出。 码: 我正在使用内存中的分组方法。 发送消息(C#): private readonly static ConnectionMapping _chatConnections = new ConnectionMapping(); public void SendChatMessage(string key, ChatMessageViewModel message) […]

如何从Web服务获取通知到ASP.NET MVC视图

任务: 将一些数据添加到数据库 – 大约5分钟 向客户端发送通知“添加到数据库的数据” 过程数据 – 大约15分钟 向客户发送通知“数据已处理” 在代码中: ASMX Web服务 [SoapDocumentMethod(OneWay = true)] [WebMethod] public void AddAndProcess(DataSet _DataToProcess) { //inserts data to DB SendNotification(“Data added to database”); ProcessData(_DataToProcess); } [SoapDocumentMethod(OneWay = true)] [WebMethod] public void ProcessData(DataSet _DataToProcess) { //Process data SendNotification(“The data is processed”); } public void SendNotification(string NotificationMessage) { //do something to […]

使用SignalR和IProgress接口的进度报告

我有一个Hub类,它有一个长时间运行的方法,我需要在它工作时显示一个进度条。 我读过这篇文章 ,我认为可以在异步方法中使用IProgress接口来发送长时间运行的操作状态。 我写了一个像这样的方法: public async Task GetServerTime(IProgress prog) { await Task.Run(() => { for (int i = 0; i < 10; i++) { prog.Report(i * 10); System.Threading.Thread.Sleep(200); } }); return DateTime.Now.ToString(); } 我尝试调用这样的方法: var appHub = $.connection.appHub; $.connection.hub.start(); appHub.server.getServerTime() .done(function (time) { alert(time); }); 但我不知道如何获得进度报告。

如何在.net 3.5中使用SignalR

我想使用SiganlR构建一个winform业务解决方案,但我无法在客户端计算机上安装.net 4.0。 看起来SignalR的最低要求为.net 4.0。 从winform和.net 3.5使用SignalR的最佳方法是什么? 我想在客户端应用程序中包含发送/接收消息function。 我将在服务器端使用.net 4.0在我的Intranet上的IIS上托管SignalR。 是否有可能创建和API(在.net 3.5中)类似于pubnub C# ? 任何人都可以指出我正确的方向。

带Web套接字的SignalR

我试图让websockets在我的开发环境中工作: Visual Studio 2010 Windows 7的 信号R 0.51 最新的Chrome / Firefox 不幸的是,Javscript客户端正在使用长轮询。 当我在客户端强制使用Web套接字时,我根本无法连接: $.connection.hub.start({ transport: [‘webSockets’] }) 服务器代码是自托管的,基于示例,如下所示: static void Main(string[] args) { string url = “http://localhost:8081/”; var server = new Server(url); // Map the default hub url (/signalr) server.MapHubs(); // Start the server server.Start(); Console.WriteLine(“Server running on {0}”, url); // Keep going until somebody […]