文章出處
文章列表
-
開發(代碼下載)
新建一個ASP.NET Web項目,項目類型為MVC,將認證模式改為無身份認證。在程序包管理控制臺輸入如下語句,安裝SignalR
- <span style="font-size:14px;">install-package Microsoft.AspNet.SignalR</span>
為了便于管理,在項目中添加一個名為Hubs的文件夾,在文件夾上右鍵單擊,選擇Visual C# >> Web >> SignalR >>SignalR 集線器類 ( V2 ),命名為ChatHub,這個類將是我們所有客戶端調用的Hub服務,修改代碼,代碼如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using Microsoft.AspNet.SignalR;
- namespace SignalRChat_Part2.Hubs
- {
- public class ChatHub : Hub
- {
- public void Send(string name, string message)
- {
- //調用所有客戶端的addNewMessageToPage function
- Clients.All.addNewMessageToPage(name, message);
- }
- }
- }
接著,創建OWIN Startup 類,修改代碼,代碼如下:
- using System;
- using System.Threading.Tasks;
- using Microsoft.Owin;
- using Owin;
- [assembly: OwinStartup(typeof(SignalRChat_Part2.Startup))]
- namespace SignalRChat_Part2
- {
- public class Startup
- {
- public void Configuration(IAppBuilder app)
- {
- // 有關如何配置應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkID=316888
- app.MapSignalR();
- }
- }
- }
然后,在HomeController中新增一個Action,命名為Chat,代碼如下:
- public ActionResult Chat()
- {
- return View();
- }
最后,創建Chat 視圖,修改試圖代碼,代碼如下:
- @{
- ViewBag.Title = "Chat";
- }
- <h2>Chat</h2>
- <div class="container">
- <input type="text" id="message" />
- <input type="button" id="sendmessage" value="Send" />
- <input type="hidden" id="displayname" />
- <ul id="discussion">
- </ul>
- </div>
- @section scripts {
- <!--注意:這里的jQuery腳本已經在模板頁_Layout.cshtml中引用-->
- <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
- <!--signalr自動生成的腳本-->
- <script src="~/signalr/hubs"></script>
- <script>
- $(function () {
- //聲明hub代理
- var chat = $.connection.chatHub;
- //創建后端要調用的前端function
- chat.client.addNewMessageToPage = function (name, message) {
- //將信息添加到頁面上
- $('#discussion').append('<li><strong>' + htmlEncode(name) + '</strong>:' + htmlEncode(message) + '</li>');
- };
- //獲取輸入的名稱
- $('#displayname').val(prompt('Enter your name:', ''));
- //將焦點定位在信息輸入框中
- $('#message').focus();
- //開啟鏈接
- $.connection.hub.start().done(function () {
- $('#sendmessage').click(function () {
- //調用后臺hub的Send方法
- chat.server.send($('#displayname').val(), $('#message').val());
- //清除發送的內容,并將焦點定位到信息框
- $('#message').val('').focus();
- });
- });
- //該function防止JS注入
- function htmlEncode(value) {
- var encodeValue = $('<div/>').text(value).html();
- return encodeValue;
- }
- });
- </script>
- }
運行,效果如圖: -
需注意的
JS在調用Hub時,Hub的首字母小寫,不管后端代碼是大寫還是小寫,JS調用時首字母均小寫,除非后臺Hub類上已經定義了
HubName 屬性(如:
[HubName("ChatHub")]
),這種情況下,JS調用Hub時,根據HubName屬性定義的名稱走。
文章列表
全站熱搜