2013-01-13 103 views
2

有關SignalR跨域的問題。我有以下幾層我的.NET應用程序:跨域SignalR與WCF

  • 數據
  • DAL
  • 服務(使用WCF)
  • ClientWeb1(CW1)
  • ClientWeb2(CW2)

服務層的原因是充當cw1/cw2上的SignalR集線器之間的中間人。

作爲cw1的目標會向其控制器發送某種更新消息,然後更新cw1的集線器,然後將其廣播給所有cw1(標準信號功能)。

我還需要爲cw1的控制器發送一個額外的消息到我的服務層,以便cw2客戶端也學習cw1的更新。在這一點上,我希望我的服務層能夠調用cw2的集線器,並根據cw1的初始消息向所有cw2的客戶端發出消息。

所以我的問題是這樣的:我如何從外部服務層訪問cw1或cw2的集線器?這可能嗎?我相信它是但似乎無法找到一個最好的答案,因爲許多棄用的SignalR函數。

回答

2

謝謝您的回答。我通過執行以下步驟最終解決了這個問題:

擺脫WCF服務。

在虛擬目錄中設置另一個web項目,這將是我保持我的集線器的地方。

然後,我通過更改客戶端腳本引用,例如,將其他2個Web項目中的SignalR客戶端指向此目標。

<script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"></script> 
<script src="Scripts/jquery.signalR.min.js" type="text/javascript"></script> 
<script src="http://localhost/MyThirdVirtualDirWebProj/signalr/hubs" type="text/javascript"></script> 

我可以發送消息到/從我的第三個「中間人」項目的樞紐。有可能是一個更好的方法來做到這一點,也許與上述的XSockets,但這似乎很好地工作。

1

據我所知,這是而不是可能。爲了能夠與Hub通信,您需要通過其公共API 發送消息,您需要在同一個ASP.NET實例中擁有另一個位於集線器旁邊的私有API(在您的情況下爲WCF服務)可以使用GlobalHost.ConnectionManager.GetHubContext<MyHub>()自己廣播消息,或者使用一些共享的內部接口將WCF服務與「SignalRness」完全分離,以實現更清晰的問題分離。

我建議使用單獨服務的後一種方法,因爲除了更好地分離關注點之外,通過公共API發送消息意味着任何連接到Hub的人都可以在發送相同消息時發送相同的消息他們是什麼。無論是或者您需要爲這些特定中心方法引入/使用不同級別的安全檢查,以確保只有某些調用者纔有權調用它們。

1

不知道如何用SignalR來完成它,但XSockets.NET很容易實現。

https://github.com/codeplanner/XSocketsWCF/blob/master/src/XSocketsWCF/XSocketsWCF/WCF/Service/RoomService.cs

的鏈接是連接到服務器的WebSocket的WCF,但你可以下載該項目... It's都在那裏。

另一個(幾個)優點是XSockets將提供羣集服務器表單3.0,以便服務器1上的消息將到達server2(反之亦然),那麼您將不需要WCF部分。

關於3.0版本:http://xsockets.net/blog/sneak-peek-at-the-30-features

問候 Uffe