sirnal下有兩種使用。 javascript
一種是 Persistent Connection ,另一種是Hubs 。詳細請看 https://github.com/SignalR/SignalR/wiki ; html
hubs支持瀏覽器與客戶端互相調用方法。因此應用更普遍。 java
在前臺頁面上寫上以下腳本: jquery
//初始化signalr function initSignalr(parameters) { var chat = $.connection.chat;//這裏的chat爲服務器上的繼承了HUB的類的HubName。 chat.client.addMessage = function(msg) { $('#submit').trigger('click'); $('#submit2').trigger('click'); }; $.connection.hub.start().done(function() { }); }
上面給client寫了一個addmessage方法。以後,服務器將調用它。 git
下面這條語句執行的方法是空的,可是必需要有: github
$.connection.hub.start().done(function() { });在頁面加載完畢後會經過此方法向瀏覽器發送請求。function裏能夠寫一些綁定事件,如:當點擊按鈕後,
調用了服務器的send方法。send必須是服務器上有的。 web
$.connection.hub.start().done(function() { $("#broadcast").click(function () { // Call the chat method on the server chat.server.send($('#msg').val()); }); });
$(function () { initDateSelect(); initTableSelect(); resetTableTile(); initSignalr(); })
須要在頁面中引入jquery.js,signalr.js以及hubs.js,在mvc中,hub.js能夠經過請求服務器得到, ajax
<script src="~/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script> <script src="~/Scripts/jquery.signalR-1.0.1.min.js" type="text/javascript"></script> <script src="~/signalr/hubs" type="text/javascript"></script>服務器在global.asax中註冊映射:
RouteTable.Routes.MapHubs();編寫類繼承自hub: 服務器中 實現了上面的send
namespace CYINC.MOMain.Plugin.LiveCharts.Connection { [HubName("chat")] public class DJ_Connection : Hub { public void Send(string message) { Clients.All.addMessage(message); } } }
注意,這裏的DJ_Connection繼承了Hub,而且它有一個特性HubName:chat, 還記得頁面中這個麼: sql
var chat = $.connection.chat;//這裏的chat爲服務器上的繼承了HUB的類的HubName。chat是你須要創建hub鏈接的class的HubName的值。
在controller中,新建action對上面的類調用: addMessage爲客戶端的腳本中的方法,因此腳本中,此方法也必須有實現。 數據庫
//經過web請求向客戶端發送消息 public ActionResult Send() { var context = GlobalHost.ConnectionManager.GetHubContext<DJ_Connection>(); context.Clients.All.addMessage("Admin");//這裏的admin是隨便寫的,由於客戶端並不須要接收此消息,僅僅是收到消息ajax從新請求數據 return null; }
不可以直接訪問Hub的對象。必需要這樣才行:
var context = GlobalHost.ConnectionManager.GetHubContext<DJ_Connection>();
這樣就能經過給發送http請求,來觸發send方法,send方法經過hub調用客戶端(瀏覽器)的addMessage方法。來控制全部客戶端作一些事情。好比一塊兒更新數據等。
====================================================================
sql server的表觸發器能夠這樣寫:(首先開啓數據庫的clr支持)
--開啓數據庫CLR 支持 exec sp_configure 'clr enabled', 1; --開始數據的驗證 alter database MOMain set TRUSTWORTHY on;--相應數據庫 RECONFIGURE
數據庫clr集成的dll這樣寫,當數據庫觸發CallWeb方法時,發送上面的send請求給服務器:
namespace SqlDependency { public class Program { /// <summary> /// 給指定的URL發送請求,服務器收到請求將通知客戶端拉數據,此dll將集成到數據庫的觸發器 /// </summary> /// <param name="url"></param> /// <returns></returns> [SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.Read)] public static String CallWeb(String url) { WebRequest req = WebRequest.Create(url); var rep = req.GetResponse(); return "1"; } } }編譯後,將此dll集成到數據庫:
use MOMain;--數據庫名 create assembly SqlDependency FROM 'D:\SqlDependency.dll'--程序集名稱和地址 WITH PERMISSION_SET = UNSAFE GO --方法名寫正確,爲程序集中的方法名,注意參數個數 create function CallWeb(@FileFullName as nvarchar(max)) returns nvarchar(max) with returns null on null input external name [SqlDependency].[SqlDependency.Program].[CallWeb] GO --編寫觸發器,傳遞參數以及 CREATE TRIGGER [dbo].[UserTableChangedEvent] on [dbo].[dj_chanchu_10min] --表名稱 FOR INSERT, DELETE, UPDATE --當有增刪改時,觸發器將被觸發 AS BEGIN DECLARE @URL AS VARCHAR(150) SET @URL = 'http://localhost/djcharts/send'; --服務器接收請求的url Select dbo.WriteStringToFile(@URL) END GO
這樣,當表數據有變化時。會發送http請求給服務器,服務器通知全部的瀏覽器從新拉一次數據。作到了實時更新,實時監控。