Tag: signalr

避免使用默认构造函数和公共属性setter

我正在使用SignalR开展一个项目,而且我有一些我将要通过它的对象。 这些对象只在我的后端代码中显式创建,我真的希望能够对它们强制实现不变性和不变量。 我遇到了SignalR要求我(好吧,实际上是NewtonSoft.Json)的问题,在我的属性上有一个默认的,无参数的构造函数和公共setter,以便它通过网络序列化和反序列化它们。 这是一个人为的例子: public class Message{ public string Text {get;set;} public int Awesomeness {get;set;} } 我想要的是,更多的是这些内容(它应该只有readonly私有字段和getter-only属性完全不可变,但对于只有POCO而没有方法的东西,足够好) public class Message { public string Text {get;private set;} public int Awesomeness {get;private set;} public Message( string msg, int awesome){ if (awesome 5){ throw new ArgumentOutOfRangeException(“awesome”); } Text = msg; Awesomeness = awesome; } } 但是,如果我这样做,我的对象无法通过SignalR .NET客户端库进行反序列化。 我可以在那里查找一个默认构造函数,并将我的setter公开,但是我必须记住不要在我的代码中使用它们,并确保团队中没有其他人在不理解的情况下使用它们。 […]

SignalR Typenamehandling

我试图让SignalR与自定义JsonSerializerSettings一起使用它的有效负载,特别是我试图设置TypeNameHandling = TypeNameHandling.Auto 。 问题似乎是,SignalR使用hubConnection.JsonSerializer和hubConnection.JsonSerializer GlobalHost.DependencyResolver.Resolve()作为其内部数据结构,然后导致各种破坏(当我设置TypeNameHandling.All时内部服务器崩溃)作为最粗鲁的例子,但是使用TypeNameHandling.Auto我也会遇到问题,特别是当涉及IProgress回调时)。 是否有任何解决方法或我只是做错了? 用于演示的示例代码: 服务器: class Program { static void Main(string[] args) { using (WebApp.Start(“http://localhost:8080”)) { Console.ReadLine(); } } } public class Startup { public void Configuration(IAppBuilder app) { var hubConfig = new HubConfiguration() { EnableDetailedErrors = true }; GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), ConverterSettings.GetSerializer); app.MapSignalR(hubConfig); } } public interface IFoo { string Val { […]

您网站上的多个signalR连接/集线器

如果我有多个页面可以使用多个集线器类,那么管理它的最佳方法是什么? 例如: 导航到网站中的另一个页面并且基本上“重新打开”与上一页打开的同一个集线器类的连接是不是很糟糕? 我是否认为在页面上打开多个集线器连接是正确的,因为它们都在一个连接中统一,即使它们是不同的集线器类?

使用SimpleInjector和SignalR

我认为使用我自己的IoC对SignalR非常简单,也许是; 我很可能做错了什么。 这是我到目前为止的代码: private static void InitializeContainer(Container container) { container.Register<IMongoHelper, MongoHelper>(); // … registrations like about and then: var resolver = new SimpleInjectorResolver(container); GlobalHost.DependencyResolver = resolver; } 然后我的class级: public class SimpleInjectorResolver : DefaultDependencyResolver { private Container _container; public SimpleInjectorResolver(Container container) { _container = container; } public override object GetService(Type serviceType) { return _container.GetInstance(serviceType) ?? base.GetService(serviceType); […]

Signalr / Hub未在IIS 7中加载,但在Visual Studio中正常工作

我正在使用SignalR的Asp .Net 4.0框架上的Web应用程序,从Nuget包安装它。 当我调试或运行应用程序而不在本地调试时,它可以正常工作。 但是,当它部署到生产服务器时,它无法找到动态注入httphandlers的signal/hubs文件。 由于它的动态特性,它必须在运行中创建,所以我不能只将工作文件复制到项目中。 我尝试了以下加载文件的方法: 并在代码背后: ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference(“~/signalr/hubs”)); 所有这些都在本地工作,但不在服务器上。 在html中呈现的路径看起来是正确的,但那里没有文件,提供404错误。 如果重要,则服务器已将应用程序设置为完全信任,并且该应用程序将作为IIS中使用子域的另一个站点下的应用程序运行。

将WebSockets与ASP.NET Web API一起使用

在ASP.NET Web API应用程序中使用原始websockets的首选方法是什么? 我们想在ASP.NET Web API应用程序的几个接口上使用二进制 WebSockets。 我很难确定应该如何完成这项工作,因为.NET似乎存在多个在线冲突和/或过时的实现。 有些示例似乎是像这样的ASP.NET,但我认为必须有一种方法在Web API框架中使用websockets。 据我所知,您可以在WebAPI中使用Signalr。 我以为使用Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler可以工作,但我不知道如何将WebSocketHandler链接到Controller … class MyServiceController : ApiController { [HttpGet] public HttpResponseMessage SwitchProtocols (string param) { HttpContext currentContext = HttpContext.Current; if (currentContext.IsWebSocketRequest || currentContext.IsWebSocketRequestUpgrading) { // several out-dated(?) examples would // use ‘new MySocketHandler’ for ??? var unknown = new ???? currentContext.AcceptWebSocketRequest(unknown); return Request.CreateResponse(HttpStatusCode.SwitchingProtocols); } } […]

无法通过SignalR Hub访问会话信息。 我的设计是错的吗?

我刚刚发现你无法访问SignalR Hub中的当前会话。 简化了我的场景:我试过写聊天。 当前用户的名称保留在会话中。 我已经使用SignalR来更新(一组连接)每个新消息。 现在我看到我无法通过集线器访问当前用户的名称。 我想可能会有一些解决方法,但实现我的设计错了吗? 我不应该为此目的使用SignalR吗? 或者我不应该以这种方式使用Session ?

如何实现网页的实时数据

(这是一个Q / A风格的问题,旨在成为那些提出类似问题的人的首选资源。很多人似乎偶然发现这样做的最佳方式,因为他们不知道所有的选择许多答案都是ASP.NET特有的,但AJAX和其他技术确实在其他框架中具有等价物,例如socket.io和SignalR。) 我有一个我在ASP.NET中实现的数据表。 我希望实时或接近实时地显示页面上此基础数据的更改。 我该怎么办? 我的型号: public class BoardGame { public int Id { get; set;} public string Name { get; set;} public string Description { get; set;} public int Quantity { get; set;} public double Price { get; set;} public BoardGame() { } public BoardGame(int id, string name, string description, int quantity, double […]