Signalr Global.asax(MVC 3)中信号机的调用方法

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

我已经为POC创建了一个示例信号器。 我想从Global.asax调用一个hub方法,并将一个字符串值传递给客户端。 我的信息中心是:-

[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的链接

有什么建议吗

当我通过在Index.html中创建一个按钮来调用我的hub方法时,它工作得很好


对不起,我没有正确地提出我的问题

这是行不通的。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);


    }