C# 的winform程序竟然可以这样开启Http服务.

写C#少说也有10来年了. 竟然可以在winform中这样开启Http服务, 以后可以不要iis了.
代码摘抄自AIBOX的Demo

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace AiBox.Win.Server.Demo
{
    public class WebPostService
    {
        private static WebPostService _instance;
        public static WebPostService Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new WebPostService();
                }
                return _instance;
            }
        }

        private System.Net.HttpListener _listener = null;

        public bool startSta = false;

        /// <summary>
        /// 启动
        /// </summary>
        public void Start(string ip,int port)
        {
            Stop();


            List<string> httpPrefixes = new List<string>();
            httpPrefixes.Add("http://" + ip + ":" + port + "/" + "UpVmsRecord/"); 
            new Thread(new ThreadStart(delegate
             {
                 _listener = new HttpListener();
                 while (true)
                 {
                     try
                     {
                         _listener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
                        //_listener.Prefixes.Add(httpPrefixes0);
                        //_listener.Prefixes.Add(httpPrefixes1);
                        if (httpPrefixes != null)
                         {
                             foreach (string url in httpPrefixes)
                             {
                                 _listener.Prefixes.Add(url);
                             }
                         }
                         _listener.Start();

                     }
                     catch (Exception ex)
                     {
                         startSta = false;
                         break;
                     }

                    //线程池
                     int minThreadNum;
                     int portThreadNum;
                     int maxThreadNum;
                     ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
                     ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
                    //ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc1), x);
                     try
                     {
                         while (true)
                         {
                             startSta = true;
                            //等待请求连接
                            //没有请求则GetContext处于阻塞状态
                            HttpListenerContext ctx = _listener.GetContext();

                             ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc), ctx);
                         }
                     }
                     catch {
                         startSta = false;
                     }
                 }
             })).Start();
        }

        /// <summary>
        /// 停止
        /// </summary>
        public void Stop()
        {
            if (_listener != null)
            {
                _listener.Stop();
                _listener.Close();
                _listener = null;
            }
        }

        /// <summary>
        /// 任务进
        /// </summary>
        /// <param name="obj"></param>
        void TaskProc(object obj)
        {
            HttpListenerContext ctx = (HttpListenerContext)obj;
            try
            {
                var url = ctx.Request.Url.AbsoluteUri;
                Stream stream = ctx.Request.InputStream;
                System.IO.StreamReader reader = new System.IO.StreamReader(stream, Encoding.UTF8);
                if (url.Contains("UpVmsRecord"))
                {
                    #region 
                    string body = reader.ReadToEnd();
                    //这里的body就是客户端发过来的数据
                    var upRecord = Newtonsoft.Json.JsonConvert.DeserializeObject<UpEventRecord>(body);
                    if(upRecord!=null)
                    {
                        Form1._Instance.InsertRecord(upRecord);
                    }
                    #endregion 
                }
                stream.Close();
                ctx.Response.Close();
                ctx = null;
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.ToString());
            }
        }
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值