2013-03-25 113 views
2

我想開發一個Web應用程序,在其中客戶端調用服務器上的服務來執行一些涉及某些處理的操作。服務器將執行所有必要的處理,當更新的數據準備就緒時,它會將該數據推送到客戶端。目前我正在考慮兩種方法: - 1.在SignalR中使用ASP.NET WEB API 2.在.NET 4.5中將WebSockets與WCF結合使用。.NET 4.5中的Websockets

我的服務器將在Windows Server 2012上,但大部分我的客戶將是IE 9,我認爲不支持WebSockets的。

書面的SignalR文件如果WebSockets的支持是不存在在不改變應用程序的代碼,它會自動下降到長輪詢英寸這是否也受.NET 4.5中的WebSockets支持,或者我必須手動完成。意味着我是否必須在服務器上同時實現Pull方法和Push方法。

請指導我,我將遵循的方法。

在以後的使用情況下,我想使用PhoneGap的製作iOS,Android的& Windows Phone的移動應用程序來構建這個Web應用程序。

回答

1

你可以用ASP.NET教程http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr

啓動後這個教程,你知道所有你需要知道的關於SignalR

+0

謝謝伊沃,但我想比較兩種方法。 SignalR&WebSockets在.NET 4.5中。如果環境不支持WebSockets或者我不得不手動處理,.NET 4.5中的WebSockets是否也回退到長輪詢。 – 2013-03-25 07:23:37

+0

有幾個開源websocket庫fo .net(http://stackoverflow.com/questions/9537641/node-js-socket-io-vs-signalr-vs-c-sharp-websocket-server)看到未標記回答。據我所知,不像信號器那樣倒退。 SignalR爲舊版瀏覽器獲得3或4次回退。另請參閱http://stackoverflow.com/questions/9524591/net-4-5-websockets-vs-signalr – Ivo 2013-03-25 07:29:23

9

的WebSockets不會回落到longpolling(並沒有真正的基本的東西合理)。 SignalR是對HTTP傳輸的更高層次的抽象,這就是爲什麼它執行回退和其他事情(如通過連接提供一個很好的編程模型)。如果您選擇在ASP.NET上使用websockets(不確定WCF),您將針對原始套接字進行編程(這意味着讀取/寫入數組段等),並且很難做到這一點很不錯。 SignalR會爲你做這件事,並且如果websocket在客戶端或服務器上不可用,它將回退到其他幾個傳輸(永遠幀,服務器發送的事件,longpolling)。

關於客戶,如果您選擇使用SignalR你需要使用SignalR客戶端。我們只支持javascript和.NET(silverlight,windows phone 8,winrt,.NET 4和.NET 4.5)。有些人已經爲其他平臺(包括iOS和Android)編寫了客戶端,但我們並未對其進行維護,因此我無法說明它們的最新狀態。

我建議你使用SignalR這樣你就可以專注於應用程序邏輯,而不是使用WebSockets的低層次的編程模型搞亂。

+0

爲什麼不能通過SignalR中的Web套接字連接Windows Phone 8? – kooldave98 2013-12-06 23:58:48

+0

因爲在windows phone 8中沒有websocket API – davidfowl 2013-12-07 10:31:08

+0

@dfowler雖然有一個套接字API,所以這不是一個藉口。 – John 2013-12-13 14:11:32

1

我可以確認後備自動工作。如果websockets傳輸不能使用,ServersentEvent傳輸將被使用..等等。最後一個傳輸協議是longpolling。

我們SignalR服務器是.NET 4.5框架的應用程序,在一個ASP.NET MVC應用程序使用託管的DLL 4.5在Windows 2012服務器上。應用程序池是ASP.NET 4.0。

  • Windows 8或Windows 2012服務器上的.NET 4.5客戶端似乎使用websockets。
  • Windows 7計算機上的相同.NET客戶端(即使安裝了框架4.5)也會自動返回到serversent事件傳輸。

隨着Signalr上的瀏覽器JavaScript客戶端,類似的事情發生了:

  • 的Chrome/Safari瀏覽器/支持WebSockets的其他瀏覽器似乎使用WebSockets。
  • IE瀏覽器/其他瀏覽器不支持websockets,但相對較晚的版本似乎使用serversentevents。

從經驗來看,serversentevents並不是很糟糕,因此如果沒有使用websockets,那麼肯定不會使用它作爲反對使用signalR的唯一因素,因爲好處很多。

希望這會有所幫助。