设为首页 收藏本站
查看: 1848|回复: 0

[经验分享] SignalR 教程一

[复制链接]

尚未签到

发表于 2017-7-1 20:20:13 | 显示全部楼层 |阅读模式
  转帖官方教程:Tutorial: Getting Started with SignalR 2 and MVC 5
  http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc

  This tutorial shows how to use ASP.NET SignalR 2 to create a real-time chat application. You will add SignalR to an MVC 5 application and create a chat view to send and display messages.  Software versions used in the tutorial
Using Visual Studio 2012 with this tutorial
Tutorial Versions
Questions and comments
Overview

  This tutorial introduces you to real-time web application development with ASP.NET SignalR 2 and ASP.NET MVC 5. The tutorial uses the same chat application code as the SignalR Getting Started tutorial, but shows how to add it to an MVC 5 application.
  In this topic you will learn the following SignalR development tasks:

  • Adding the SignalR library to an MVC 5 application.
  • Creating hub and OWIN startup classes to push content to clients.
  • Using the SignalR jQuery library in a web page to send messages and display updates from the hub.

  The following screen shot shows the completed chat application running in a browser.
DSC0000.png


  Sections:

  • Set up the Project
  • Run the Sample
  • Examine the Code
  • Next Steps
Set up the Project

  Prerequisites:

  • Visual Studio 2013. If you do not have Visual Studio, see ASP.NET Downloads to get the free Visual Studio 2013 Express Development Tool.

  This section shows how to create an ASP.NET MVC 5 application, add the SignalR library, and create the chat application.


  •   In Visual Studio, create a C# ASP.NET application that targets .NET Framework 4.5, name it SignalRChat, and click OK.
    DSC0001.png


  •   In the New ASP.NET Project dialog, and select MVC, and click Change Authentication.
    DSC0002.png


  •   Select No Authentication in the Change Authentication dialog, and click OK.
    DSC0003.png

      Note: If you select a different authentication provider for your application, a Startup.cs class will be created for you; you will not need to create your own Startup.cs class in step 10 below.
  •   Click OK in the New ASP.NET Project dialog.

  •   Open the Tools | Library Package Manager | Package Manager Console and run the following command. This step adds to the project a set of script files and assembly references that enable SignalR functionality.  install-package Microsoft.AspNet.SignalR

  •   In Solution Explorer, expand the Scripts folder. Note that script libraries for SignalR have been added to the project.
    DSC0004.png

  •   In Solution Explorer, right-click the project, select Add | New Folder, and add a new folder named Hubs.

  •   Right-click the Hubs folder, click Add | New Item, select the Visual C# | Web | SignalR node in the Installed pane, select SignalR Hub Class (v2) from the center pane, and create a new hub named ChatHub.cs. You will use this class as a SignalR server hub that sends messages to all clients.
    DSC0005.png


  •   Replace the code in the ChatHub class with the following code.using System;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    namespace SignalRChat
    {
    public class ChatHub : Hub
    {
    public void Send(string name, string message)
    {
    // Call the addNewMessageToPage method to update clients.
    Clients.All.addNewMessageToPage(name, message);
    }
    }
    }

  •   Create a new class called Startup.cs. Change the contents of the file to the following.using Owin;
    using Microsoft.Owin;
    [assembly: OwinStartup(typeof(SignalRChat.Startup))]
    namespace SignalRChat
    {
    public class Startup
    {
    public void Configuration(IAppBuilder app)
    {
    // Any connection or hub wire up and configuration should go here
    app.MapSignalR();
    }
    }
    }

  •   Edit the HomeController class found in Controllers/HomeController.cs and add the following method to the class. This method returns the Chat view that you will create in a later step.public ActionResult Chat()
    {
    return View();
    }
  •   Right-click the Views/Home folder, and select Add... | View.

  •   In the Add View dialog, name the new view Chat.
    DSC0006.png


  •   Replace the contents of Chat.cshtml with the following code.
      Important: When you add SignalR and other script libraries to your Visual Studio project, the Package Manager might install a version of the SignalR script file that is more recent than the version shown in this topic. Make sure that the script reference in your code matches the version of the script library installed in your project.
    @{
    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 {
    <!--Script references. -->
    <!--The jQuery library is required and is referenced by default in _Layout.cshtml. -->
    <!--Reference the SignalR library. -->
    <script src="~/Scripts/jquery.signalR-2.1.0.min.js"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script src="~/signalr/hubs"></script>
    <!--SignalR script to update the chat page and send messages.-->
    <script>
    $(function () {
    // Reference the auto-generated proxy for the hub.  
    var chat = $.connection.chatHub;
    // Create a function that the hub can call back to display messages.
    chat.client.addNewMessageToPage = function (name, message) {
    // Add the message to the page.
    $('#discussion').append('<li><strong>' + htmlEncode(name)
    + '</strong>: ' + htmlEncode(message) + '</li>');
    };
    // Get the user name and store it to prepend to messages.
    $('#displayname').val(prompt('Enter your name:', ''));
    // Set initial focus to message input box.  
    $('#message').focus();
    // Start the connection.
    $.connection.hub.start().done(function () {
    $('#sendmessage').click(function () {
    // Call the Send method on the hub.
    chat.server.send($('#displayname').val(), $('#message').val());
    // Clear text box and reset focus for next comment.
    $('#message').val('').focus();
    });
    });
    });
    // This optional function html-encodes messages for display in the page.
    function htmlEncode(value) {
    var encodedValue = $('<div />').text(value).html();
    return encodedValue;
    }
    </script>
    }
  •   Save All for the project.

Run the Sample


  •   Press F5 to run the project in debug mode.

  •   In the browser address line, append /home/chat to the URL of the default page for the project. The Chat page loads in a browser instance and prompts for a user name.
    DSC0007.png

  •   Enter a user name.
  • Copy the URL from the address line of the browser and use it to open two more browser instances. In each browser instance, enter a unique user name.

  •   In each browser instance, add a comment and click Send. The comments should display in all browser instances.
      Note: This simple chat application does not maintain the discussion context on the server. The hub broadcasts comments to all current users. Users who join the chat later will see messages added from the time they join.


  •   The following screen shot shows the chat application running in a browser.
    DSC0008.png

  •   In Solution Explorer, inspect the Script Documents node for the running application. This node is visible in debug mode if you are using Internet Explorer as your browser. There is a script file named hubs that the SignalR library dynamically generates at runtime. This file manages the communication between jQuery script and server-side code. If you use a browser other than Internet Explorer, you can also access the dynamic hubs file by browsing to it directly, for example http://mywebsite/signalr/hubs.

Examine the Code

  The SignalR chat application demonstrates two basic SignalR development tasks: creating a hub as the main coordination object on the server, and using the SignalR jQuery library to send and receive messages.
SignalR Hubs

  In the code sample the ChatHub class derives from the Microsoft.AspNet.SignalR.Hub class. Deriving from the Hub class is a useful way to build a SignalR application. You can create public methods on your hub class and then access those methods by calling them from scripts in a web page.
  In the chat code, clients call the ChatHub.Send method to send a new message. The hub in turn sends the message to all clients by callingClients.All.addNewMessageToPage.
  The Send method demonstrates several hub concepts :

  • Declare public methods on a hub so that clients can call them.
  • Use the Microsoft.AspNet.SignalR.Hub.Clients property to access all clients connected to this hub.

  •   Call a function on the client (such as the addNewMessageToPage function) to update clients.public class ChatHub : Hub
    {
    public void Send(string name, string message)
    {
    Clients.All.addNewMessageToPage(name, message);
    }
    }

SignalR and jQuery

  The Chat.cshtml view file in the code sample shows how to use the SignalR jQuery library to communicate with a SignalR hub. The essential tasks in the code are creating a reference to the auto-generated proxy for the hub, declaring a function that the server can call to push content to clients, and starting a connection to send messages to the hub.
  The following code declares a reference to a hub proxy.var chat = $.connection.chatHub;
  Note: In JavaScript the reference to the server class and its members is in camel case. The code sample references the C# ChatHub class in JavaScript as chatHub. If you want to reference the ChatHub class in jQuery with conventional Pascal casing as you would in C#, edit the ChatHub.cs class file. Add a using statement to reference the Microsoft.AspNet.SignalR.Hubs namespace. Then add the HubName attribute to the ChatHub class, for example [HubName("ChatHub")]. Finally, update your jQuery reference to the ChatHub class.

  The following code shows how to create a callback function in the script. The hub class on the server calls this function to push content updates to each client. The optional call to the htmlEncode function shows a way to HTML encode the message content before displaying it in the page, as a way to prevent script injection.chat.client.addNewMessageToPage = function (name, message) {
// Add the message to the page.
$('#discussion').append('<li><strong>' + htmlEncode(name)
+ '</strong>: ' + htmlEncode(message) + '</li>');
};

  The following code shows how to open a connection with the hub. The code starts the connection and then passes it a function to handle the click event on the Send button in the Chat page.
  Note: This approach ensures that the connection is established before the event handler executes.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
Next Steps

  You learned that SignalR is a framework for building real-time web applications. You also learned several SignalR development tasks: how to add SignalR to an ASP.NET application, how to create a hub class, and how to send and receive messages from the hub.
  For a walkthrough on how to deploy the sample SignalR application to Azure, see Using SignalR with Web Apps in Azure App Service. For detailed information about how to deploy a Visual Studio web project to a Windows Azure Web Site, see Create an ASP.NET web app in Azure App Service.
  To learn more advanced SignalR developments concepts, visit the following sites for SignalR source code and resources :

  • SignalR Project
  • SignalR Github and Samples
  • SignalR Wiki

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390172-1-1.html 上篇帖子: 上周热点回顾(7.25-7.31) 下篇帖子: 陨石坑之webapi使用filter
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表