[转载]ASP.NET MVC推模式用SignalR實現

[转载]asp.net 推模式 用SignalR實現 - 無限遐想 - 博客园.

顯示介面

打開3個這樣的介面,再一個中輸入發送信息,在其他介面中會同時得到數據。

1.下載 SignalR jquery.signalR.js,並且引用。

2.建立MVC工程。

3.在Global.asax中加入註冊項目,註冊連接項目

[csharp]
protected void Application_Start()
{
RouteTable.Routes.MapConnection<myconnection>("echo", "echo/{*operation}");
}
[/csharp]

4.建立myconnection類,繼承PersistentConnection

重寫

[csharp]
protected override Task OnReceivedAsync(string clientId, string data)
{
// Broadcast data to all clients

//在這裡進行數據處理
data = string.Format("數據是:{0} 時間是:{1}", data, DateTime.Now.ToString());
return Connection.Broadcast(data);
}
[/csharp]

代碼如下:

[csharp]
View Code

public class myconnection : PersistentConnection

{
protected override Task OnReceivedAsync(string clientId, string data)
{
// Broadcast data to all clients
data = string.Format("數據是:{0} 時間是:{1}", data, DateTime.Now.ToString());
return Connection.Broadcast(data);
}

}
[/csharp]

5.在Index.cshtml頁面中進行調用

[js]
View Code

<script type="text/javascript">
$(function () {
var connection = $.connection('echo');

connection.received(function (data) {
$('#messages').append('<li>' + data + '</li>');
});

connection.start();

$("#broadcast").click(function () {
connection.send($('#msg').val());
});
});

</script>
[/js]

介面代碼如下:

[js]
View Code

@{
ViewBag.Title = "Home Page";
}
<script type="text/javascript">
$(function () {
var connection = $.connection('echo');

connection.received(function (data) {
$('#messages').append('<li>' + data + '</li>');
});

connection.start();

$("#broadcast").click(function () {
connection.send($('#msg').val());
});
$("#btnStop").click(function () {
connection.stop();
});
});

</script>
<h2>@ViewBag.Message</h2>
<input type="text" id="msg" />
<input type="button" id="broadcast" value="發送" />
<input type="button" id="btnStop" value="停止" />
<ul id="messages">
</ul>
[/js]

可以開始,停止。

var connection = $.connection('echo'); 取得連接

囘調函數:

connection.received(function (data) {
$('#messages').append('<li>' + data + '</li>');
});
開始連接 : connection.start();

停止連接: connection.stop();