我使用SQL Server作为背板来扩展我的SignalR。 在我的场景中,有一些服务在其他服务器上运行,我需要将他们的工作状态集成到我的SignalR集线器中。
我尝试使用SQL Server scaleout运行一个简单的控制台应用程序并发布如下消息:
var config = new SqlScaleoutConfiguration(connectionString);
GlobalHost.DependencyResolver.UseSqlServer(connectionString);
var messageBus = new SqlMessageBus(GlobalHost.DependencyResolver, config);
var message = new Message("TransactionHub", "RegisterClient","{userId:1}");
messageBus.Publish(message);
我能以某种方式使用SQLScaleout吗?
如果没有,还有其他方法可以做我想做的事吗?
修改
我已经完成halter73建议并且它工作正常,您必须注意,如果您激活客户端功能,您发送的参数必须匹配,即如果对象是“Namespace.ClassName”,那么您应该发送完全相同类型的对象。
答案 0 :(得分:2)
您应该尝试使用GlobalHost.ConnectionManager.GetHubContext
而不是直接发布到总线。您的代码看起来像这样:
var context = GlobalHost.ConnectionManager.GetHubContext<TransactionHub>();
context.Clients.All.registerClient(new { userId = 1 });