我们已经在web应用程序的owin启动代码中配置了redis背板。
var config = new RedisScaleoutConfiguration(hangfireRedisConnection, scaleoutEventKey);
GlobalHost.DependencyResolver.UseRedis(config);
app.MapSignalR();
Web应用程序在计时器上运行后台作业,唤醒并在发生重要事件时通知客户端。在查询后端之后,后台作业调用一个简单的HubService包装器,它将IHubContext作为依赖项,最终调用集线器上的Client.All.notify方法向下推送到客户端:
HubService:
private readonly IHubContext applicationHub;
public HubService(IHubContext applicationHub)
{
this.applicationHub = applicationHub;
}
public void NotifyClient()
{
hubContext.Client.All.nofify(message); // <- this is always called, with and without the backplane, however with the backplane it doesn't make it to the client
}
HubContext在启动时注册:
Container.RegisterInstance<IHubContext>(GlobalHost.ConnectionManager.GetHubContext<ApplicationHub>());
在没有背板的情况下工作正常,但配置的背板不适用。我已经在调试器中验证了正在进行呼叫,但它并没有将其发送给客户端。
此外,如果我们通过js或signalr.client客户端从客户端(Web应用程序之外)调用signalr hub,则背板的工作方式与广告一样。
在我们从Web应用程序本身直接调用集线器上下文而不首先从客户端发起呼叫的情况下是否缺少某些内容?