2009-01-09 28 views
9

Kişisel bir proje için bir C# http sunucusu yazmaya çalışıyorum, iade edilen sunucu üstbilgisini Microsoft-HTTPAPI/2.0'den başka bir şeye nasıl değiştirebileceğimi merak ediyorum.HttpListener Sunucu Üstbilgisi C#

public class HttpWebServer 
    { 
     private HttpListener Listener; 

     public void Start() 
     { 
      Listener = new HttpListener(); 
      Listener.Prefixes.Add("http://*:5555/"); 
      Listener.Start(); 
      Listener.BeginGetContext(ProcessRequest, Listener); 
      Console.WriteLine("Connection Started"); 
     } 

     public void Stop() 
     { 
      Listener.Stop(); 
     } 

     private void ProcessRequest(IAsyncResult result) 
     { 
      HttpListener listener = (HttpListener)result.AsyncState; 
      HttpListenerContext context = listener.EndGetContext(result); 

      string responseString = "<html>Hello World</html>"; 
      byte[] buffer = Encoding.UTF8.GetBytes(responseString); 

      context.Response.ContentLength64 = buffer.Length; 
      System.IO.Stream output = context.Response.OutputStream; 
      output.Write(buffer, 0, buffer.Length); 
      output.Close(); 

      Listener.BeginGetContext(ProcessRequest, Listener); 
     } 
    } 
+1

IIS7 çok daha hızlı, basit düzeyde İyilik –

+0

Çok parçacıklı mı, ben 'HttpListener' böylece HTTP çekirdek sırası aynı – Sebastian

cevap

10

HttpListener sınıfı, bağlantıda belirtildiği gibi her zaman eklenmiş olan yerel API'yi, HttpSendHttpResponse Function'u kapsüller. Sunucu başlık bilgileri için belirsiz metin.

HttpListener ürününü sıfırdan kodlamak istemediğiniz sürece, bunun nasıl düzeltileceği yoktur.

1

Ben çalıştım ama Kişisel Sunucu, Microsoft-HTTPAPI/2.0

Ben de ekleme, kaldırma, set, hiçbir başarı ile kullanmış, AddHeader

private void ProcessRequest(IAsyncResult result) 
     { 
      HttpListener listener = (HttpListener)result.AsyncState; 
      HttpListenerContext context = listener.EndGetContext(result); 

      string responseString = "<html>Hello World</html>"; 
      byte[] buffer = Encoding.UTF8.GetBytes(responseString); 
      context.Response.ContentLength64 = buffer.Length; 

      //One 
      context.Response.AddHeader("Server", "My Personal Server"); 

      //Two 
      context.Response.Headers.Remove(HttpResponseHeader.Server); 
      context.Response.Headers.Add(HttpResponseHeader.Server, "My Personal Server"); 

      //Three 
      context.Response.Headers.Set(HttpResponseHeader.Server, "My Personal Server"); 

      System.IO.Stream output = context.Response.OutputStream; 
      output.Write(buffer, 0, buffer.Length); 
      output.Close(); 

      Listener.BeginGetContext(ProcessRequest, Listener); 
     } 
ile geri geliyor

Teşekkürler Teşekkürler

+0

güncellemek Could özgün kodu olmalıdır, http.sys'' çağırır şüpheli , Lütfen? – arul

+0

Benim için çalışmıyor –

6

ben biraz geç olduğumu biliyorum ama sadece son zamanlarda aynı şeyi yapmak için çalışıyordum ve yanlışlıkla çalışan bir çözüm üzerinde geldi ama herhangi yankıları varsa ben emin değilim.

Response.Headers.Add("Server", "\r\n\r\n"); 
+0

Evet, bu satır kendi başına Sunucu üstbilgisini yanıt olarak kaldırır. Ancak bundan sonra başka bir Sunucu Üstbilgisi eklediğimde bunu elde ediyorum: ** Sunucum! Microsoft HTTPAPI/2.0 ** – Milad