Web HTTP Service

    public class HttpWebService
    {
        #region /*private member*/

        /// <summary>
        /// 私有Http监听器
        /// </summary>
        private HttpListener m_Listerner;

        /// <summary>
        /// 私有线程
        /// </summary>
        private Thread m_Thread;

        /// <summary>
        /// 监听IP
        /// </summary>
        private string m_IP;

        /// <summary>
        /// 监听端口
        /// </summary>
        private int m_Port = 8620;

        #endregion

        #region /*constructor method*/
        /// <summary>
        /// 构造函数
        /// </summary>
        public HttpWebService()
        {
            Init();
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="port">端口号</param>
        public HttpWebService(int port)
        {
            this.m_Port = port;
            Init();
        }

        #endregion

        #region /*public method*/

        /// <summary>
        /// 启动 HTTP Server
        /// </summary>
        public void Start()
        {
            Init();
            this.m_Thread.Start();
        }

        /// <summary>
        /// 停止 HTTP Server
        /// </summary>
        public void Stop()
        {
            if (m_Listerner != null)
            {
                m_Listerner.Stop();
            }
            this.m_Thread = null;
        }

        #endregion

        #region /*private method*/

        /// <summary>
        /// 初始方法
        /// </summary>
        private void Init()
        {
            //取IP
            this.m_IP = IPHelper.GetLocalIP();

            m_Listerner = new HttpListener();
            //指定匿名身份验证
            m_Listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
            //设置URI前缀
            m_Listerner.Prefixes.Add("http://" + m_IP + ":" + m_Port + "/api/");
            m_Listerner.Prefixes.Add("http://127.0.0.1:" + m_Port + "/api/");
            m_Listerner.Prefixes.Add("http://localhost:" + m_Port + "/api/");

            this.m_Thread = new Thread(new ThreadStart(myThreadMethod));
            this.m_Thread.IsBackground = true;
        }


        /// <summary>
        /// 线程方法
        /// </summary>
        private void myThreadMethod()
        {
            m_Listerner.Start();
            m_Listerner.BeginGetContext(new AsyncCallback(GetContextCallBack), m_Listerner);//开始异步检索请求
            Console.WriteLine("Http Server Start Successed.......");

        }

        /// <summary>
        /// 异步回调方法
        /// </summary>
        /// <param name="iar">异步操作状态</param>
        private void GetContextCallBack(IAsyncResult iar)
        {
            HttpListenerContext ctx = null;
            try
            {
                m_Listerner = iar.AsyncState as HttpListener;
                ctx = m_Listerner.EndGetContext(iar);
                //请求处理
                RequestProcesing.Working(ctx);
                //开始异步检索请求
                m_Listerner.BeginGetContext(new AsyncCallback(GetContextCallBack), m_Listerner);

            }
            catch (HttpListenerException e)
            {
                Console.WriteLine("HttpListenerException: {0}", e);
            }
            finally
            {
                ctx = null;
            }

        }

        #endregion

    }

posted @ 2012-03-14 13:56  天纯蓝  阅读(486)  评论(0编辑  收藏  举报