2018年9月27日 星期四

C# Nancy Simple Web Application


https://dotblogs.com.tw/ricochen/2016/12/22/220117


Visual Studio 2017 > New Project > Windows Desktop > .NET Framework Console Application

Install-Package Nancy.Hosting.Self


Program.cs

using Nancy;
using Nancy.Hosting.Self;
using Nancy.ModelBinding;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;

namespace ConsoleApp1
{
    public class User
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public bool IsAdmin { get; set; }
    }

    public class TestModule : NancyModule
    {
        public TestModule()
        {
            Get["/"] = _ => "Hello Nancy from Get request";

            Post["/"] = _ => "Hello Nancy from Post request";

            Get["/Home"] = Post["/Home"] = parameters =>
            {
                var usersmodel = new List<User>();
                usersmodel.Add(new User { Name = "rico" });
                usersmodel.Add(new User { Name = "sherry" });

                this.ViewBag.data = "From Nancy";

                return View["index.sshtml", usersmodel];
            };

            Get["/User/{Name}"] = p =>
            {
                if (p.Name == "rico")
                    return $"Admini user #{p.Name}!";

                else
                    return $"Normal user #{p.Name}!";
            };

            Post["/RequestBody"] = _ =>
            {
                byte[] data = new byte[this.Request.Body.Length];
                this.Request.Body.Read(data, 0, (int)this.Request.Body.Length);
                string body = System.Text.Encoding.Default.GetString(data);
                User user = JsonConvert.DeserializeObject<User>(body);//Install-Package Nancy.Serialization.JsonNet
                return $"Name:{user.Name} Age:{user.Age} IsAdmin:{user.IsAdmin}";
            };

            Post["/Bind"] = _ =>
            {
                var requestPOCO = this.Bind<User>();
                return $"Name:{requestPOCO.Name}";
            };
        }
    }

    public class ClockModule : NancyModule
    {
        public ClockModule()
        {
            Get["/clock"] = (args) => {
                return new Response
                {
                    ContentType = "text/event-stream",
                    Contents = (Stream stream) =>
                    {
                        var data = Encoding.UTF8.GetBytes("retry: 1000\ndata: " + DateTime.Now.ToString() + "\n\n");
                        stream.Write(data, 0, data.Length);
                        stream.Flush();
                    }
                };
            };
        }
    }

    class Program
    {
        public Program()
        {
            Uri uri = new Uri("http://localhost:9487/");
            HostConfiguration hostConfigs = new HostConfiguration
            {
                UrlReservations = new UrlReservations() { CreateAutomatically = true }
            };
            NancyHost host = new NancyHost(hostConfigs, uri);
            host.Start();
            System.Diagnostics.Process.Start(uri.ToString()+"sse.html");
            Console.WriteLine(uri);
        }

        static void Main(string[] args)
        {
            try
            {
                new Program();
                Console.ReadKey();
            } catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
    }
}


views/index.html

<html>
<body>
<h4>@ViewBag.data</h4>
@Each
<p>Name:@Current.Name</p>
@EndEach

<div id="clock">1970-01-01</div>
<script>
new EventSource("/clock").onmessage = function(event) {
    document.getElementById("clock").innerHTML = event.data;
};
</script>

</body>
</html>


Test URL

http://127.0.0.1:9487/
http://127.0.0.1:9487/Home
http://127.0.0.1:9487/User/rico
http://127.0.0.1:9487/User/apple

Postman.exe x64

POST http://127.0.0.1:9487/RequestBody > Body > raw:
{"Name":"Rico","Age":"35","IsAdmin":"true"}

POST http://127.0.0.1:9487/Bind > Body < raw + JSON(application/json)
{"Name":"Rico","Age":"35","IsAdmin":"true"}


Server Sent Event
http://127.0.0.1:9487/clock


End

2018年9月11日 星期二

My SQL locks exceeds the lock table size




Error Code: 1206. The total number of locks exceeds the lock table size


show variables like 'innodb_buffer_pool_size';

innodb_buffer_pool_size 8388608


set global innodb_buffer_pool_size=4g;
Access Denied;


"C:\Program Files\MySQL\MySQL Router 8.0\bin\mysqlrouter.exe" -c "C:\ProgramData\MySQL\MySQL Router\mysqlrouter.conf" --service

C:\ProgramData\MySQL\MySQL Router\mysqlrouter.conf
innodb_buffer_pool_size=8M
innodb_buffer_pool_size=4G

2007 to 2023 HP and Dell Servers Comparison

  HP Gen5 to Gen11  using ChatGPT HP ProLiant Gen Active Years CPU Socket Popular HP CPUs Cores Base Clock Max RAM Capacity Comparable Dell ...