2017-06-17 16 views
0

HttpListenerを使用してローカルWebサーバーを作成する際に問題が発生します。 localhost uri(または127.0.0.1)を使用すると、うまく動作し、要求にうまく対応します。C#HttpListener not responding

しかし、「whateverabc.com」のようなメイクアップドメインを追加すると、サーバーは要求に応答しなくなり、ChromeはERR_NAME_NOT_RESOLVEDエラーを出力しています。

私には何が欠けていますか?ありがとう!

public class WebServer 
{ 
    private readonly HttpListener _listener = new HttpListener(); 
    private readonly Func<HttpListenerRequest, string> _responderMethod; 

    public WebServer(string[] prefixes, Func<HttpListenerRequest, string> method) 
    {    
     if (!HttpListener.IsSupported) 
      throw new NotSupportedException(
       "Needs Windows XP SP2, Server 2003 or later."); 

     if (prefixes == null || prefixes.Length == 0) 
      throw new ArgumentException("prefixes"); 

     if (method == null) 
      throw new ArgumentException("method"); 

     foreach (string s in prefixes) 
      _listener.Prefixes.Add(s); 

     _listener.IgnoreWriteExceptions = true; 
     _responderMethod = method; 
     _listener.Start(); 
    } 

    public WebServer(Func<HttpListenerRequest, string> method, params string[] prefixes) 
     : this(prefixes, method) { } 

    public void Run() 
    { 
     ThreadPool.QueueUserWorkItem((o) => 
     { 
      Console.WriteLine("Webserver running..."); 
      try 
      { 
       while (_listener.IsListening) 
       { 
        ThreadPool.QueueUserWorkItem((c) => 
        { 
         var ctx = c as HttpListenerContext; 
         try 
         { 
          string rstr = _responderMethod(ctx.Request); 
          byte[] buf = Encoding.UTF8.GetBytes(rstr); 
          ctx.Response.ContentLength64 = buf.Length; 
          ctx.Response.OutputStream.Write(buf, 0, buf.Length); 
         } 
         catch { } // suppress any exceptions 
         finally 
         { 
          ctx.Response.OutputStream.Close(); 
         } 
        }, _listener.GetContext()); 
       } 
      } 
      catch { } // suppress any exceptions 
     }); 
    } 

    public void Stop() 
    { 
     _listener.Stop(); 
     _listener.Close(); 
    } 
} 

static void Main(string[] args) 
    { 
     WebServer ws = new WebServer(SendResponse, "http://whateverabc.com:54785/"); 
     ws.Run(); 
     Console.WriteLine("A simple webserver. Press a key to quit."); 
     Console.ReadKey(); 
     ws.Stop(); 
    } 

    public static string SendResponse(HttpListenerRequest request) 
    { 
     return string.Format("<HTML><BODY>My web page.<br>{0}</BODY></HTML>", DateTime.Now); 
    } 

答えて

0

何が起こっているのかという基本的な誤解があるようです。

接頭辞を登録することによって、その接頭辞で始まり指定されたポートに移動する要求を処理するようにWebサーバーに指示するだけです。

しかし、あなたのウェブサイトにアクセスするためにChrome(または他のもの)を使用すると、まず、設定されたDNSサーバーに「whateverabc.com」ドメインがどのIPアドレスを指し示すかを知るDNS要求があります。このアドレスは存在しないため(https://www.whois.com/にチェックすることができます)、リクエストは失敗します。したがって、あなたのウェブサーバは、始める要求を受け取らない。

ローカルマシンでウェブサーバーを起動し、 "http://www.microsoft.com"で始まるリクエストを聞く場合は、Chromeからのアクセスが実際には期待されますかマイクロソフトのWebサイトに入力すると、ローカルのWebサーバーですか?

関連する問題