Signalr Global.asax(MVC 3)中信号机的调用方法
我已经为POC创建了一个示例信号器。 我想从Global.asax调用一个hub方法,并将一个字符串值传递给客户端。 我的信息中心是:-Signalr Global.asax(MVC 3)中信号机的调用方法,signalr,signalr-hub,Signalr,Signalr Hub,我已经为POC创建了一个示例信号器。 我想从Global.asax调用一个hub方法,并将一个字符串值传递给客户端。 我的信息中心是:- [HubName("messageHub")] public class MessageHub : Hub { public static IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MessageHub>(); public void Messa
[HubName("messageHub")]
public class MessageHub : Hub
{
public static IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MessageHub>();
public void Message()
{
/*
* services and updates the messages
* property on the PushMessage hub
*/
//IHubContext context = GlobalHost.ConnectionManager.GetHubContext<SignalR_Error_Logging.Models.ErrorModel>();
List<GenerateError.Repository.ErrorModel> model = ErrorRepository.GetError();
context.Clients.pushMessages(model[0].ErrorMessage);
}
在应用程序中_Start()
我无法在UI(即Index.cshtml)中显示消息
我尝试过的事情:-
- 以IIS身份运行应用程序
- 更改创建HubContext的方式
IHubContext _context = GlobalHost.ConnectionManager.GetHubContext<MessageHub>(); context.Clients.notify("Hello world");
IHubContext\u context=GlobalHost.ConnectionManager.GetHubContext(); context.Clients.notify(“Hello world”);
if(客户端!=null) { 客户端。shootErrorMessage(消息); this.Clients.shootErrorMessage(消息); }
- 通过Stackoverflow的链接
对不起,我没有正确地提出我的问题 这是行不通的。Global.asax中的应用程序_Start()在AppDomain的生命周期内只调用一次。它发生在网站启动时,此时尚未连接任何客户端(因为网站尚未完全初始化),因此无法通过信号器发送消息。这将永远无法工作。Global.asax中的应用程序_Start()在AppDomain的生命周期内只调用一次。它发生在网站启动时,此时尚未连接任何客户端(因为网站尚未完全初始化),因此无法通过信号器发送消息。我发现,呼叫中心的方式不正确。 目前,我已修改了Global.asax中的代码:-
private void CallSignalR()
{
var context = SignalR.GlobalHost.ConnectionManager.GetHubContext<SignalR_Error_Logging.SignalRHub.MessageHub>();
List<GenerateError.Repository.ErrorModel> err = GenerateError.Repository.ErrorRepository.GetError();
foreach (var item in err)
{
item.ErrorDescription = item.ErrorDescription + DateTime.Now.ToString();
}
context.Clients.pushMessages(err);
}
private void callsignal()
{
var context=signar.GlobalHost.ConnectionManager.GetHubContext();
List err=GenerateError.Repository.ErrorRepository.GetError();
foreach(err中的var项)
{
item.ErrorDescription=item.ErrorDescription+DateTime.Now.ToString();
}
context.Clients.pushMessages(err);
}
现在效果绝对不错:)
仍然在寻找更好的选择 我发现,呼叫中心的方式不正确。 目前,我已修改了Global.asax中的代码:-
private void CallSignalR()
{
var context = SignalR.GlobalHost.ConnectionManager.GetHubContext<SignalR_Error_Logging.SignalRHub.MessageHub>();
List<GenerateError.Repository.ErrorModel> err = GenerateError.Repository.ErrorRepository.GetError();
foreach (var item in err)
{
item.ErrorDescription = item.ErrorDescription + DateTime.Now.ToString();
}
context.Clients.pushMessages(err);
}
private void callsignal()
{
var context=signar.GlobalHost.ConnectionManager.GetHubContext();
List err=GenerateError.Repository.ErrorRepository.GetError();
foreach(err中的var项)
{
item.ErrorDescription=item.ErrorDescription+DateTime.Now.ToString();
}
context.Clients.pushMessages(err);
}
现在效果绝对不错:)
仍然在寻找更好的选择 谢谢……)你完全正确。但当我运行一个实例并重新启动VS2012时。它应该会起作用。反正。。我发现调用hub方法的方式是错误的。再次感谢!!!似乎如果答案是正确的,则应将其标记为正确。谢谢:)你完全正确。但当我运行一个实例并重新启动VS2012时。它应该会起作用。反正。。我发现调用hub方法的方式是错误的。再次感谢!!!似乎如果答案是正确的,就应该标记为正确。
IHubContext _context = GlobalHost.ConnectionManager.GetHubContext<MessageHub>();
context.Clients.notify("Hello world");
private void CallSignalR()
{
var context = SignalR.GlobalHost.ConnectionManager.GetHubContext<SignalR_Error_Logging.SignalRHub.MessageHub>();
List<GenerateError.Repository.ErrorModel> err = GenerateError.Repository.ErrorRepository.GetError();
foreach (var item in err)
{
item.ErrorDescription = item.ErrorDescription + DateTime.Now.ToString();
}
context.Clients.pushMessages(err);
}