2014-09-05 126 views
0

我已經搜遍了該網站,遇到了SignalR OnConnected and OnDisconnected not firing以及類似問題,但該解決方案不適用於我的情況。我已經做已註冊客戶端方法。雖然正確的客戶端綁定,但在部署OnConnected時未觸發

此外,我的集線器的OnConnected方法在我的本地盒子上運行時彈出。它只是在部署時觸發而不是。但是,其他所有方法都可以正常工作就目前來說,我創建了一個變通這樣:

<script> 
    $(function() { 
     var myHub = $.connection.myHub; 
     myHub.client.clientMessage = function (message) { alert(message); }; 

     // Start the connection. 
     $.connection.hub.start().done(function() { 
      myHub.server.superfluousMethodToDoSameThingInOnConnect(); 
     }); 
    }); 
</script> 

我真的很想但停止使用該第二個電話,和只需OnConnected正常工作,因爲它應該。我的部署服務器上有必要使其工作相同嗎?

作爲參考,我的SignalR版本1.2.2(限於.NET 4.0,現在)併入MVC站點(沒有錯誤,否則)。 我的開發框是在IIS Express 8.5中託管的Windows 7 部署框是在IIS V6.0中託管的Winows Server 2003。

編輯1:我已經包含了

myHub.connection.stateChanged(function (change) { alert("State: " + change.newState); }); 

進行調試,並在頁面加載時,它顯示的彈出式「狀態:0」,其次是「狀態:1」的彈出式窗口中很短的時間後,和我離開頁面時的「狀態:4」,所以看起來我的連接本身的行爲是正確的。這在本地和部署服務器上運行相同。

編輯2:爲了進一步測試,我已經更新在如下所述輪轂的方法:

public override Task OnConnected() 
{ 
    Groups.Add(Context.ConnectionId, Context.User.Identity.Name); 
    Clients.All.clientMessage("OnConnected:: ID: " + Context.ConnectionId + " USER: " + Context.User.Identity.Name); 
    return base.OnConnected(); 
} 

public void SuperfluousMethodToDoSameThingInOnConnect() 
{ 
    Clients.All.clientMessage("SuperfluousMethodToDoSameThingInOnConnect:: ID: " + Context.ConnectionId + " USER: " + Context.User.Identity.Name); 
} 

的這個測試表明,只有文本從SuperfluousMethodToDoSameThingInOnConnect發送結果顯示返回給調用者。但是,其他客戶端(在其他瀏覽器窗口中測試)請參見OnConnectedSuperfluousMethodToDoSameThingInOnConnect中的文本。

此外,當我嘗試使用Context.Groups(Context.User.Identity.Name)發送消息給主叫方時,則不會發送消息。但是,如果我將組登記行Groups.Add(Context.ConnectionId, Context.User.Identity.Name)OnConnected移動到SuperfluousMethodToDoSameThingInOnConnect,則可以使用Groups.Add(Context.ConnectionId, Context.User.Identity.Name)發送消息可以。這看起來非常奇怪,因爲我可以看到OnConnected方法被調用,但該組沒有真正註冊?

真的不知所措,以解釋這種不規律的行爲。

編輯3:將Web應用程序推送到Windows Server 2012 VM,在那裏我發現它的工作正常,與我的本地開發箱相同。 SignalR在IIS 6上無法正常工作嗎?

回答

2

根據http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/supported-platforms中的'Supported server IIS versions',只支持IIS7或更新版本。

+0

謝謝!根據我的SignalR 1,我從該網站看到http://www.asp.net/signalr/overview/signalr-1x/getting-started-with-aspnet-signalr/supported-platforms是更適用的鏈接。 x版本,但我也看到該頁面指定IIS7 +並且只能集成,而不是經典(其中IIS6是)模式。 – 2014-09-09 18:23:28

+0

再次感謝!有了這些信息,我至少能夠對所有事情進行適當的評論,以便我們可以在升級服務器時以正確的方式返回並清理。現在只需要接受解決方法。 – 2014-09-09 18:41:17