Asp.net mvc 4 从外部web请求通知信号器客户端

Asp.net mvc 4 从外部web请求通知信号器客户端,asp.net-mvc-4,signalr,signalr-hub,Asp.net Mvc 4,Signalr,Signalr Hub,我有一个基于ASP.NET MVC 4插件的webapp,其中有一个插件包含一个侦听器类,在后台运行,侦听SQL Server代理队列上的消息。当新消息到达时,我想将这些消息推送到所有连接的客户端 我已经创建了一个通知中心,当从客户端发送到服务器时,它可以完美地工作,但是我用来向客户端发送更新的代码没有任何作用 var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>(); context.Cl

我有一个基于ASP.NET MVC 4插件的webapp,其中有一个插件包含一个侦听器类,在后台运行,侦听SQL Server代理队列上的消息。当新消息到达时,我想将这些消息推送到所有连接的客户端

我已经创建了一个通知中心,当从客户端发送到服务器时,它可以完美地工作,但是我用来向客户端发送更新的代码没有任何作用

var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.All.dataUpdated(message.Data);
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.dataUpdated(message.Data);
我试过使用

using (var timerScope = AutofacDependencyResolver.Current.ApplicationContainer.BeginLifetimeScope("httpRequest"))
{
    var connMgr = timerScope.Resolve<IConnectionManager>();
    var context = connMgr.GetHubContext<NotificationHub>();
    context.Clients.All.dataUpdated(message.Data);
}
使用(var timerScope=autofacdependencycresolver.Current.ApplicationContainer.BeginLifetimeScope(“httpRequest”))
{
var connMgr=timerScope.Resolve();
var context=connMgr.GetHubContext();
context.Clients.All.dataUpdated(message.Data);
}
但是我只得到一个InvalidOperationException,错误消息是:“由于HttpContext不可用,无法创建请求生存期范围。”

可以理解,因为我试图在web请求之外拨打电话


我想做的一切可能吗?我见过一些使用webrequest连接到自身以发送消息的示例,但我正在寻找一种更干净的方法,我真的不想使用成熟的消息总线

你的第一个样本应该有效。我认为您不需要
autofaccDependencyResolver
GetHubContext
甚至不创建您的
NotificationHub
。它所做的只是提供了一个对Signal自己的内部消息总线的发布的抽象。您是否已成功从中心内部调用
客户端.All.dataUpdated
?我猜你的客户端中心的
dataUpdated
方法连接不正确。你能发布你的客户端代码吗?除非你替换了GlobalHost.DependencyResolver,否则你使用的依赖项解析程序是错误的。我真的不知道问题出在哪里,因为当天晚些时候,同样的代码确实有效。我最近遇到了一些VS2012崩溃的问题,所以可能与此有关。谢谢你让我知道我的代码是正确的,halter73,所以我没有继续走错路。