Csharp/CSharp Tutorial/Network/HttpListener

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

HttpListener Demo

<source lang="csharp">using System; using System.IO; using System.Net; using System.Text; using System.Threading; class WebServer {

   HttpListener _listener;
   string _baseFolder;     
   public WebServer(string uriPrefix, string baseFolder) {
       System.Threading.ThreadPool.SetMaxThreads(50, 1000);
       System.Threading.ThreadPool.SetMinThreads(50, 50);
       _listener = new HttpListener();
       _listener.Prefixes.Add(uriPrefix);
       _baseFolder = baseFolder;
   }
   public void Start() {                       
       _listener.Start();
       while (true)
           try {
               HttpListenerContext request = _listener.GetContext();
               ThreadPool.QueueUserWorkItem(ProcessRequest, request);
           } catch (HttpListenerException) { break; }  
           catch (InvalidOperationException) { break; }
   }
   public void Stop() { _listener.Stop(); }
   void ProcessRequest(object listenerContext) {
       try {
           var context = (HttpListenerContext)listenerContext;
           string filename = Path.GetFileName(context.Request.RawUrl);
           string path = Path.rubine(_baseFolder, filename);
           byte[] msg;
           if (!File.Exists(path)) {
               context.Response.StatusCode = (int)HttpStatusCode.NotFound;
               msg = Encoding.UTF8.GetBytes("Sorry, that page does not exist");
           } else {
               context.Response.StatusCode = (int)HttpStatusCode.OK;
               msg = File.ReadAllBytes(path);
           }
           context.Response.ContentLength64 = msg.Length;
           using (Stream s = context.Response.OutputStream)
               s.Write(msg, 0, msg.Length);
       } catch (Exception ex) { Console.WriteLine("Request error: " + ex); }
   }

}</source>