国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C# .net基于Http實現(xiàn)web server(web服務(wù))

2019-11-17 03:13:43
字體:
供稿:網(wǎng)友

C# .net基于Http實現(xiàn)web server(web服務(wù))

什么是 web server?

百度百科是這么解釋的:

Web Server中文名稱叫網(wǎng)頁服務(wù)器或web服務(wù)器。WEB服務(wù)器也稱為WWW(WORLD WIDE WEB)服務(wù)器,主要功能是提供網(wǎng)上信息瀏覽服務(wù)。

Web服務(wù)器可以解析(handles)HTTP協(xié)議。當(dāng)Web服務(wù)器接收到一個HTTP請求(request),會返回一個HTTP響應(yīng)(response),例如送回一個HTML頁面。為了處理一個請求(request),Web服務(wù)器可以響應(yīng)(response)一個靜態(tài)頁面或圖片,進行頁面跳轉(zhuǎn)(redirect),或者把動態(tài)響應(yīng)(dynamic response)的產(chǎn)生委托(delegate)給一些其它的程序例如CGI腳本,jsp(javaServer Pages)腳本,servlets,asp(Active Server Pages)腳本,服務(wù)器端(server-side)JavaScript,或者一些其它的服務(wù)器端(server-side)技術(shù)。無論它們(譯者注:腳本)的目的如何,這些服務(wù)器端(server-side)的程序通常產(chǎn)生一個HTML的響應(yīng)(response)來讓瀏覽器可以瀏覽。

通俗的講,Web服務(wù)器傳送(serves)頁面使瀏覽器可以瀏覽,然而應(yīng)用程序服務(wù)器提供的是客戶端應(yīng)用程序可以調(diào)用(call)的方法(methods)。確切一點,你可以說:Web服務(wù)器專門處理HTTP請求(request),但是應(yīng)用程序服務(wù)器是通過很多協(xié)議來為應(yīng)用程序提供(serves)商業(yè)邏輯(business logic)。常用的web Server

我們常用的web服務(wù),是IIS,tomcat等。在進行網(wǎng)絡(luò)通信的時候我們還會用到socket,甚至可以基于socket來實現(xiàn)HTTP通信,不過我們看一下更簡單的實現(xiàn)。

我們能用來做什么?

IIS是非常強大的,功能齊全。我們的目標不是做一個和它一樣的web server。而是基于這樣的理念為我們的開發(fā)和架構(gòu)服務(wù)。

特性和用處:

  比如在我們的軟件中 需要在多個應(yīng)用程序通信時。

  專用的功能帶來更高的效率,比如我們僅僅處理某幾一個網(wǎng)頁的顯示。我們見過路由里的那個管理路由器的頁面吧,那就是一個輕量級的小web server實現(xiàn),它可放不下一個windows + iis;

  內(nèi)嵌的windows應(yīng)用程序,比如我們想在winform里嵌入webBrower,配合它來做一些應(yīng)用。

  

我們的實現(xiàn)

基于 .net 框架的HttpListener 類 來處理http協(xié)議,我們只需要基于它寫一個自己的處理類。

namespace HttpListenerDemo{    static class PRogram    {        /// <summary>        /// 應(yīng)用程序的主入口點。        /// </summary>        [STAThread]        static void Main()        {            HttpListener httpListenner;            httpListenner = new HttpListener();            httpListenner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;            httpListenner.Prefixes.Add("http://localhost:8090/");            httpListenner.Start();                        new Thread(new ThreadStart(delegate {                try                {                    loop(httpListenner);                }                catch (Exception)                {                    httpListenner.Stop();                }            })).Start();        }        private static void loop(HttpListener httpListenner)        {            while (true) {                HttpListenerContext context = httpListenner.GetContext();                HttpListenerRequest request = context.Request;                HttpListenerResponse response = context.Response;                Servlet servlet = new MyServlet();                servlet.onCreate();                if (request.HttpMethod == "POST") {                    servlet.onPost(request, response);                }                else if (request.HttpMethod == "GET")                {                    servlet.onGet(request, response);                }                response.Close();            }        }    }}    public class Servlet    {        public virtual void onGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { }        public virtual void onPost(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { }        public virtual void onCreate()        {        }    }    public class MyServlet : HttpListenerDemo.Servlet    {        public override void onCreate()        {            base.onCreate();        }        public override void onGet(HttpListenerRequest request, HttpListenerResponse response)        {            Console.WriteLine("GET:" + request.Url);            byte[] buffer = Encoding.UTF8.GetBytes("OK");            System.IO.Stream output = response.OutputStream;            output.Write(buffer, 0, buffer.Length);            // You must close the output stream.            output.Close();            //listener.Stop();        }        public override void onPost(HttpListenerRequest request, HttpListenerResponse response)        {            Console.WriteLine("POST:" + request.Url);            byte[] res = Encoding.UTF8.GetBytes("OK");            response.OutputStream.Write(res, 0, res.Length);        }    }

如何使用?

1.寫一個class 繼承自Servlet 類,在這里做具體的 業(yè)務(wù)邏輯實現(xiàn)。

2.復(fù)制main方法里的代碼,在合適的實際 啟動 httpListener。

參考:http://wenku.baidu.com/link?url=105Uuf34jmjbFnNEp1YTw1ry3Rx7_bXoKWQvLciQRUg9g5wJpViAedTYP45yUcruGEjuL7lACtwyu2g2KplUhOLA5XCLKbrY1NzWf7Ah1Fe

http://msdn.microsoft.com/zh-cn/library/system.net.httplistener(v=vs.110).aspx


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 江陵县| 嘉义县| 巴彦淖尔市| 桃源县| 崇礼县| 安图县| 乳源| 武夷山市| 巫溪县| 双江| 黄浦区| 宣城市| 兴隆县| 西畴县| 海南省| 通河县| 若尔盖县| 南漳县| 张家川| 海安县| 汉源县| 拜城县| 南丰县| 洛隆县| 临漳县| 高清| 高陵县| 胶州市| 玉田县| 郴州市| 泽州县| 兴文县| 绥德县| 略阳县| 东港市| 南华县| 开阳县| 新兴县| 博白县| 尚志市| 读书|