2012-10-11 26 views
0

我已經爲POC創建了一個樣本signalR。 我想從Global.asax調用一個集線器方法,並將一個字符串值傳遞給客戶端。 我的信息轂是: -來自Global.asax的SignalR調用方法(MVC 3)

[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); 

    } 

我在layout.cshtml定義的兩個腳本的

<script type="text/javascript" src="../../Scripts/jquery-1.6.4.js"></script> 
<script type="text/javascript" src="../../Scripts/jquery.signalR-0.5.3.js"></script> 

我的index.html是如下: -

@{ 
    ViewBag.Title = "Receive Error message"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<script src="/signalr/hubs" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function() { 
     var myHub = $.connection.messageHub; 
     myHub.pushMessages = function (value) { 
      console.log('Server called addMessage(' + value + ')'); 
      $("#messages").append("<li>" + value + "</li>"); 
     }; 
     $("#btnMessage").click(function() { 

      myHub.message(); 
     }); 
     $.connection.hub.start().done(function() { alert("Now connected!"); }).fail(function() { alert("Could not Connect!"); }); 
    }); 

</script> 
<h2>Receive Error Messages</h2> 
<ul id="messages"></ul> 
<input type="button" id="btnMessage" value="Get Error" /> 

在全球.asax 我寫過

SignalR_Error_Logging.SignalRHub.MessageHub hub = new SignalRHub.MessageHub(); 
     hub.Message(); 

In Application_Start();

我無法在我的UI中顯示消息(即Index.cshtml)。

的事情,我曾嘗試: -

  • 運行該應用程序爲IIS。
  • 更改創建HubContext的方式。

    IHubContext _context = GlobalHost.ConnectionManager.GetHubContext<MessageHub>(); 
    context.Clients.notify("Hello world"); 
    
  • if (Clients != null) { Clients.shootErrorMessage(message); this.Clients.shootErrorMessage(message); }

  • 飄通#1 Calling SignalR hub clients from elsewhere in system

任何建議的鏈接???

當我通過在Index.html中創建按鈕來調用我的hub方法時,它工作正常。

道歉沒有框架我的問題妥善!

回答

2

我想通了,調用Hub的方式是不正確的。 暫且我已經修改我的代碼在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); 


    } 

作品精美絕倫現在:)

還是找出更好的選擇!!!!

1

這將永遠不會工作。 Global.asax中的Application_Start()僅在AppDomain的生命週期中調用一次。它發生在網站啓動時,此時還沒有客戶端連接(因爲網站未完全初始化),因此您無法通過SignalR發送消息。

+0

謝謝.. :)你絕對正確。 但是,當我有一個實例運行,我重新啓動我的VS2012。它應該工作。 無論如何..我想通過調用我的中心方法是錯誤的。 再次感謝! – Shubh

+0

似乎如果答案是正確的,它應該被標記爲這樣。 –