1

在我的项目中,SignalR 工作正常。但是由于在 Web Farm 中引入了负载平衡,我打算按照这篇文章使用 Backplane 和 SQL:http ://www.asp.net/signalr/overview/performance/scaleout-with-sql-server 。

如果我使用 Microsoft.AspNet.SignalR 和 Microsoft.AspNet.SignalR.SqlServer 的最新软件包(版本 2.2.0)并选择 4.5 .Net framework,背板工作正常。但是,由于某些原因,我需要坚持使用 .Net 4.0 版本而不使用 Owin。当我安装版本为 1.1.4 或 1.2.2 的 Microsoft.AspNet.SignalR 和 Microsoft.AspNet.SignalR.SqlServer 包并使用 .Net 4.0 时,SignalR 似乎工作正常,但背板(使用 SQL)似乎没有要开始了,因为数据库中没有创建表。如果我启用跟踪,则没有跟踪文件。仅生成与传输相关的跟踪文件。我在 global.asax.cs 中使用以下代码:

// Signalr connection string 
var signalRConnectionstring = ConfigurationManager.ConnectionStrings["SignalR"].ToString();
GlobalHost.DependencyResolver.UseSqlServer(signalRConnectionstring);

 // Register the default hubs route: ~/signalr
 RouteTable.Routes.MapHubs();
4

1 回答 1

2

最后我可以找到解决方案。该错误使我误以为这是 .Net 4.0 问题。我的项目中没有引发运行时异常,因此调试没有帮助。当我静态分析代码时,发现问题出在 SQLServer for SignalR 的依赖解析器上。global.asax 下面的行没有解决依赖问题(也没有抛出任何异常)

GlobalHost.DependencyResolver.UseSqlServer(signalRConnectionstring);

这是因为我在我的项目中使用了 Unity。

解决方案很简单,必须在解析 SignalR 后解析 SignalR 的 SQLServer,我的项目中已经有一个自定义类。我希望我首先看到这个方向,这会节省很多时间。

于 2016-03-16T14:46:01.100 回答