标签: signalr-hub

自定义SignalR的错误消息

我使用SignalR 1.0.当服务器上发生异常时,客户端会收到这样的消息

{"I":"0","E":"抛出类型'System.Exception'的异常.","T":"在ds:\ PATH\TO\HUB.cs中的METHODNAME:第227行\ r \n \n在ds:\ PATH\TO\HUB.cs中的METHODNAME:第51行"}

但我想让它更加用户友好.我该怎么做?我已经阅读了将所有服务器方法放入try-catch块的建议.但我认为这不是一个真实的方式.

我跟踪了Exception,发现在Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Incoming方法中捕获了异常.但它是内部静态方法,我无法自定义.

在理想情况下,我希望能够将异常转换为有效的响应.

c# asp.net asp.net-mvc-4 signalr signalr-hub

1
推荐指数
1
解决办法
1245
查看次数

NetworkError:SignalR集线器上的500内部服务器错误

当我在本地计算机上运行该网站时,它可以正常工作,但是当我上传到我的域时,它开始生成此错误.我在差异服务器上的两个应用程序上遇到同样的问题.同样只是实现解决方案,什么是ASP.Net MVC 3,C#.我的两个应用程序都运行在IIS服务器上的"完全信任"保护.在本地它工作正常但问题出在远程服务器上.

应用程序运行正常,但返回错误:(这是mozilla firebug/network的截图.

在此输入图像描述

asp.net-mvc signalr signalr-hub

1
推荐指数
1
解决办法
4760
查看次数

多个SignalR集线器具有不同的配置

我遇到了需要使用不同配置的多个SignalR集线器(至少2个)的情况.

目前使用v1.1.0我只能执行以下配置所有集线器的操作:

GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(30);
Run Code Online (Sandbox Code Playgroud)

是否可以为多个集线器设置不同的配置?

c# asp.net signalr signalr-hub

1
推荐指数
1
解决办法
584
查看次数

VS2012注册和依赖注入中的SignalR 2.0

我能够使用我自己的DI与SignalR 1.13一起工作:

//Funq container
GlobalHost.DependencyResolver = new FunqDependencyResolver(container); 
RouteTable.Routes.MapHubs();
Run Code Online (Sandbox Code Playgroud)

现在有了新版本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(); }
    }
}
Run Code Online (Sandbox Code Playgroud)

(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-> Configuration().如何将DI容器传递给SignalR Startup?

Global.asax.cs(这在应用程序启动时自动运行)

protected void Application_Start(object sender, EventArgs e)
{
    var appHost = new AppHost(); //DI init
    appHost.Init();
    var container = appHost.Container; //DI container here …
Run Code Online (Sandbox Code Playgroud)

c# signalr signalr-hub

1
推荐指数
1
解决办法
2785
查看次数

SignalR从控制器加入组

当用户登录我的网站时,他们会从下拉列表中选择他们所属的组.在登录回发时,当他们登录时,我想将它们分配给正确的SignalR组.

根据此处的文档,我可以通过以下方式加入客户端:

contosoChatHubProxy.server.joinGroup(groupName);
Run Code Online (Sandbox Code Playgroud)

有没有办法从控制器分配组?我可以称之为Hub:

var hub = new NotificationHub()
hub.JoinGroup(selectedGroup);
Run Code Online (Sandbox Code Playgroud)

但hub方法中的Context为null.这可能,或者我是否错误地接近了这个问题?谢谢你的任何建议.

c# asp.net-mvc signalr signalr-hub

1
推荐指数
1
解决办法
2280
查看次数

PartialView中的SignalR客户端未接收

我仍然得到SignalR的基础知识.我想在我的网站的不同部分使用它,所以我想我可以在主布局中启动连接,并在子视图中添加客户端方法.

根据这个答案,我有:

window.hub = $.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)

在我的Layout.cshtml中,和

window.hub.done(function () {
   $.connection.notificationHub.server.joinScannerGroup(1);
   alert("in sub view");
});
Run Code Online (Sandbox Code Playgroud)

在我的子视图中,哪个有效.集线器已连接,并且JoinScannerGroup()调用该方法.但是,如果我尝试添加:

$.connection.notificationHub.client.scanReceived = function (text) {
    alert("scan received");
};
Run Code Online (Sandbox Code Playgroud)

在子视图的javascript中的任何地方,它永远不会被调用.也许我认为它错了,但我想在主页上连接,然后允许任何子页面接收客户端调用.

此外,如果我移动$.connection.start()到子视图,它确实可以正常工作.我理解错了吗?

c# asp.net-mvc signalr signalr-hub

1
推荐指数
1
解决办法
311
查看次数

当SignalR在负载均衡器后面扩展时,一组中的所有客户都确保接收signalR呼叫吗?

我一直在研究与负载均衡器结合的SignalR实现,并且有一些基本的(如果不是简单的声音)问题.我必须在前言中说我对负载平衡器有零(0)经验.

我们将有2台服务器位于负载均衡器后面.客户端是ASP .Net应用程序.我们被告知负载均衡器保持会话亲和力.

请考虑以下情形:

Client1 & Client2 -- connect to GroupA--> Server1
Client3 & Client4 -- connect to GroupA--> Server2
Run Code Online (Sandbox Code Playgroud)

1)Server1对GroupA进行客户端调用 - 这假设客户端1-4将获得通知,对吗?

2)如何处理?

3)它是SignalR本身或负载均衡器的功能吗?

4)在组级别发送消息时,仅将消息传递到与该特定服务器上的组关联的客户端应用程序,还是将消息转发给该组的所有客户端?

有没有人对此有任何想法?

谢谢,JB

load-balancing signalr signalr-hub signalr.client

1
推荐指数
1
解决办法
202
查看次数

SignalR服务器内存消耗(归咎于Windsor IHubActivator?)

我正在测试一个SignalR服务器(在控制台应用程序中自托管),它最终将构成数据记录系统的基础.测试客户端正在向集线器发出大约180个呼叫/秒,而消息本身非常小(只是一个名称/值对).

我正在使用Castle Windsor进行DI,使用自定义IHubActivator来解析Hub实例:

internal class WindsorHubActivator : IHubActivator
{
    private readonly IWindsorContainer _container;

    public WindsorHubActivator(IWindsorContainer container)
    {
        _container = container;
    }

    public IHub Create(HubDescriptor descriptor)
    {
        var hubType = descriptor.HubType;
        return _container.Resolve(hubType) as IHub;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是集线器类:

public class TelemetryHub : Hub
{
    private readonly TelemetryDataService _telemetryDataService;

    public TelemetryHub(TelemetryDataService telemetryDataService)
    {
        _telemetryDataService = telemetryDataService;
    }

    public void LogTelemetryData(string name, double value)
    {
        _telemetryDataService.LogTelemetryData(name, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

当集线器类在Windsor注册为"瞬态"时,内存消耗量稳步攀升,直到达到2Gb然后因OOM异常而下降.如果我将Hub注册为"Singleton",那么应用程序内存消耗将保持非常低且一致.

TelemetryDataService班是不是问题.我已经注释掉了hub的构造函数和方法代码,问题仍然存在.

出于好奇,我接着进一步改变了阶段,改变了WindsorHubActivator阶级,将温莎带出了等式:

internal class WindsorHubActivator : IHubActivator …
Run Code Online (Sandbox Code Playgroud)

c# castle-windsor signalr signalr-hub

1
推荐指数
1
解决办法
834
查看次数

SignalR Client返回HTTP错误400错误请求

我正在使用SignalR Client连接HubConnection.在调用时Start(),System.Net.WebException会抛出以下消息:

远程服务器返回错误:(400)错误请求.

服务器响应是:

不是有效的Web套接字请求.

我正在运行带有IIS 8.5的Windows Server 2012 R2

可能是什么问题呢?

asp.net iis signalr signalr-hub signalr.client

1
推荐指数
1
解决办法
2906
查看次数

通过SignalR Core访问数据库上下文

我正在使用AspNetCore.SignalR,并且需要有关如何通过集线器访问SQL Server数据库的建议。有关此的资源不多。我知道如何添加一个单例,但以后不知道如何访问它。如何访问使用集线器任务内Startup.cs中的Configuration.GetConnectionString定义的数据库上下文?

谢谢。

以下是相关代码:

启动文件

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
        });


    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    DbContextOptionsBuilder<PlayerContext> PlayerContextOptions = new DbContextOptionsBuilder<PlayerContext>();
    PlayerContextOptions.UseSqlServer(Configuration.GetConnectionString("Default"));
    services.AddSingleton(PlayerContextOptions.Options);

    services.AddDbContext<PlayerContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default")));



    services.AddCors(options => options.AddPolicy("CorsPolicy",
        builder =>
        {
            builder.AllowAnyMethod().AllowAnyHeader()
            .AllowCredentials();
            }));

    services.AddSignalR();
} 
Run Code Online (Sandbox Code Playgroud)

但是我根本不知道该在Hub文件中做什么。我什至不知道从哪里开始。我添加了单例,但是我不知道如何在我的中心文件中访问它。这是我想做的,但是我愿意做一个更好的方法:

MyHub.cs

using (PlayerContext dbContext = new PlayerContext(/* Singleton needs to go here */))
{
    // do database stuff
} 
Run Code Online (Sandbox Code Playgroud)

c# dbcontext signalr signalr-hub asp.net-core-signalr

1
推荐指数
2
解决办法
1758
查看次数