• An Example of SignalR


    SignalR can keep communication with the client and Server on real time. It`s a very wonderful independent tool for MVC development. 

    Here I just finished an example by myself . And try to deepen my understanding in it.

    SignalR was supported by the windows server 2012 that under the IIS 8 and .NET Framework4.5 environment. In the backaround, it`s 

    support the WebSocket.   

    At first, just try to add the package by Nuget

    1. Microsoft.AspNet.SignalR  

    2.Microsoft.AspNet.SignalR.Client

    @{
        ViewBag.Title = "Home Page";
    }
    
    <!-- 自動生成されたサンプルのHTMLは、すべてコメントアウト
    <div class="jumbotron">
        <h1>ASP.NET</h1>
        <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
        <p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more &raquo;</a></p>
    </div>
    
    <div class="row">
        <div class="col-md-4">
            <h2>Getting started</h2>
            <p>
                ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that
                enables a clean separation of concerns and gives you full control over markup
                for enjoyable, agile development.
            </p>
            <p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301865">Learn more &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2>Get more libraries</h2>
            <p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>
            <p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301866">Learn more &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2>Web Hosting</h2>
            <p>You can easily find a web hosting company that offers the right mix of features and price for your applications.</p>
            <p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301867">Learn more &raquo;</a></p>
        </div>
    </div>
    -->
    
    <!-- 以下のコードを追加 -->
    <br />
    
    <div class="row">
        <div class="col-md-2">
            <input type="button" onclick="StartInvoicing()" value="SignalRテスト" />
        </div>
    
        <div class="col-md-7">
            <div class="progress">
                <div class="progress-bar" id="progressBar" role="progressbar" style=" 0%;">
                </div>
            </div>
        </div>
    
        <div class="col-md-1">
            <label id="progressNum">進捗率</label>
        </div>
    </div>
    
    
    <div>
        <label id="message"></label>
    </div>
    
    <script type="text/javascript">
    function StartInvoicing()
    {
        var progressNotifier = $.connection.progress;
    
        // サーバー側からのメッセージを受信する部分
        progressNotifier.client.sendMessage = function (message, count) {
            UpdateProgress(message, count);
        };
    
        // サーバー側にメッセージを送る部分
        $.connection.hub.start().done(function () {
            progressNotifier.server.getCountAndMessage("Hello");
        });
    }
    
    function UpdateProgress(message, count) {
        $("#progressNum").html(count + '%');
        $("#progressBar").css({ 'width': count + '%' });
    
        $("#message").html(message);
    }
    </script>

    3. in view file support the last request as the source attacker.

    You'd better bring the java script to your html file.

     pasting

    <!-- 以下のコードを追加 -->
    <br />
    
    <div class="row">
        <div class="col-md-2">
            <input type="button" onclick="StartInvoicing()" value="SignalRテスト" />
        </div>
    
        <div class="col-md-7">
            <div class="progress">
                <div class="progress-bar" id="progressBar" role="progressbar" style=" 0%;">
                </div>
            </div>
        </div>
    
        <div class="col-md-1">
            <label id="progressNum">進捗率</label>
        </div>
    </div>
    
    
    <div>
        <label id="message"></label>
    </div>
    
    <script type="text/javascript">
    function StartInvoicing()
    {
        var progressNotifier = $.connection.progress;
    
        // サーバー側からのメッセージを受信する部分
        progressNotifier.client.sendMessage = function (message, count) {
            UpdateProgress(message, count);
        };
    
        // サーバー側にメッセージを送る部分
        $.connection.hub.start().done(function () {
            progressNotifier.server.getCountAndMessage("Hello");
        });
    }
    
    function UpdateProgress(message, count) {
        $("#progressNum").html(count + '%');
        $("#progressBar").css({ 'width': count + '%' });
    
        $("#message").html(message);
    }
    </script>

    4,   And a ProgressHub.cs as the following

     pasting

    using Microsoft.AspNet.SignalR;
    using Microsoft.AspNet.SignalR.Hubs;
    using System.Threading.Tasks;
    using System.Threading;
    
    namespace WebApplication1
    {
        [HubName("progress")]
        public class ProgressHub : Hub
        {
            public int count = 1;
    
            public static void SendMessage(string msg, int count)
            {
                var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>();
                hubContext.Clients.All.sendMessage(string.Format(msg), count);
            }
    
            public void GetCountAndMessage(string msg)
            {
                ProgressStart();
                Clients.Caller.sendMessage(string.Format(msg), count);
            }
    
            private void ProgressStart()
            {
                Task.Run(() => {
                    for (int i=1; i<=100; i++)
                    {
                        Thread.Sleep(500);
                        SendMessage("処理中...", i);
                    }
                });
            }
        }
    }

     5. Edit the Startup.cs file.

     pasting

    namespace WebApplication1
    {
        public partial class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
                app.MapSignalR(); // ← この行を追加
            }
        }
    }

     References 

     https://github.com/SignalR/SignalR/tree/dev/src/Microsoft.AspNet.SignalR.Client.Portable

    Love it, and you live without it
  • 相关阅读:
    12
    11
    10
    9
    8
    7
    6
    5
    4
    3
  • 原文地址:https://www.cnblogs.com/tomclock/p/7452806.html
Copyright © 2020-2023  润新知