2014-01-15 2 views
4

C# Windows Forms 응용 프로그램 또는 C# 콘솔 응용 프로그램을 사용하여 간단한 웹 페이지를 만들려고합니다.C# Windows 양식을 사용하여 간단한 로컬 웹 페이지를 만드는 방법

응용 프로그램을 실행에서 웹 페이지를 호스팅 시작됩니다 : 나는 그러나이 나에게 의미의 톤을하지 않는 독학되고, MSDN에 대한 using endpoints에 조금 읽고

http://localhost:3070/somepage 

...

요약하면이 프로그램을 실행하면 localhost : 3070의 웹 페이지에 일부 텍스트가 표시됩니다. 이러한 막연한 질문에 대한 죄송합니다

그러나 괜찮은 자습서를 검색 내 시간 (들) ... 당신의 시간을

감사를 어떤 이해할 결과를 산출하지 않았습니다!

+1

'HttpListener' : http://msdn.microsoft.com/en-us/library/system.net.httplistener(v=vs.110).aspx –

+0

http://www.asp.net/web- 양식 – user2930100

+1

asp.net 또는 Windows Forms에 대한 질문이 있습니까? 그들은 완전히 다릅니다 (Windows Forms는 제목에 있습니다 .. 따라서'HttpListener'에 링크 된 이유입니다). –

답변

5
당신은 HttpListener을 만들어 보길 원하는 것

, 당신 청취자에게 접두사를 추가 할 수 있습니다. 예를 들어, Listener.Prefixes.Add("http://+:3070/")과 같이 원하는 포트에 바인드 할 수 있습니다.

간단한 콘솔 응용 프로그램 : 요청이

using System; 
using System.Net; 
using System.Text; 

namespace TestServer 
{ 
    class ServerMain 
    { 
     // To enable this so that it can be run in a non-administrator account: 
     // Open an Administrator command prompt. 
     // netsh http add urlacl http://+:8008/ user=Everyone listen=true 

     const string Prefix = "http://+:3070/"; 
     static HttpListener Listener = null; 
     static int RequestNumber = 0; 
     static readonly DateTime StartupDate = DateTime.UtcNow; 

     static void Main(string[] args) 
     { 
      if (!HttpListener.IsSupported) 
      { 
       Console.WriteLine("HttpListener is not supported on this platform."); 
       return; 
      } 
      using (Listener = new HttpListener()) 
      { 
       Listener.Prefixes.Add(Prefix); 
       Listener.Start(); 
       // Begin waiting for requests. 
       Listener.BeginGetContext(GetContextCallback, null); 
       Console.WriteLine("Listening. Press Enter to stop."); 
       Console.ReadLine(); 
       Listener.Stop(); 
      } 
     } 

     static void GetContextCallback(IAsyncResult ar) 
     { 
      int req = ++RequestNumber; 

      // Get the context 
      var context = Listener.EndGetContext(ar); 

      // listen for the next request 
      Listener.BeginGetContext(GetContextCallback, null); 

      // get the request 
      var NowTime = DateTime.UtcNow; 

      Console.WriteLine("{0}: {1}", NowTime.ToString("R"), context.Request.RawUrl); 

      var responseString = string.Format("<html><body>Your request, \"{0}\", was received at {1}.<br/>It is request #{2:N0} since {3}.", 
       context.Request.RawUrl, NowTime.ToString("R"), req, StartupDate.ToString("R")); 

      byte[] buffer = Encoding.UTF8.GetBytes(responseString); 
      // and send it 
      var response = context.Response; 
      response.ContentType = "text/html"; 
      response.ContentLength64 = buffer.Length; 
      response.StatusCode = 200; 
      response.OutputStream.Write(buffer, 0, buffer.Length); 
      response.OutputStream.Close(); 
     } 
    } 
} 

했다 세고 추가 신용, 컴퓨터의 서비스에 추가하십시오!

+0

@Oxymoron 포스트에 추가하려면 해당 포트를 여는 수신기는 응용 프로그램을 실행하는 사용자가 관리자 권한이나 IP 및 포트 조합을 통해 허용해야합니다.또는 netsh http add urlacl url = http : // + : 3070/user = "DOMAIN \ User"(모든 사용자를 나타내는 사용자 계정이 있음)을 사용할 수 있습니다. – Nico

+0

이 코드 주석에 추가되었습니다. @ 니코 감사합니다. Lines 9, 10, 11 – Oxymoron

+0

@Oxymoron이 솔루션은 나를 위해 정말 잘 작동합니다. _ 그 밖의 것들로 수정하는 데 어려움을 겪고 있습니다 ...이 질문에 답을 할 때,이 대답은 훌륭합니다. 제 문제는 제가 시도 할 때입니다. 포트는이 페이지를 전달하므로 어디에서나 액세스 할 수 있습니다. 간단히 말해서, 저는 arduino 프로젝트 중 일부에 대해 HTTP를 사용하여 직렬 통신 프로토콜을 설정하고 있습니다. 나는 시리얼 정보를 가져가이 웹 페이지를 사용하여 온라인으로 푸시하고 싶습니다. 어떤 아이디어가 ...? 나는'const string Prefix = "http : // + : 3070 /"; "을 내 IP 주소로 변경하려고 노력했지만 운이 없다. – JesterBaze

4

마이크로 소프트 Relased 그것을 OWIN라는 오픈 소스 프로젝트는 당신이 콘솔 응용 프로그램에서 웹 애플리케이션을 호스팅 할 수 있습니다 노드하지만 결론에 simlar입니다 :

당신은 여기에 대한 자세한 내용은 찾을 수

:

,

그러나 당신이 당신의 개인 수신기를 만드는 주장하는 경우가 여기에 몇 가지 도움말을 찾을 수 있습니다

+2

한 문장으로 Microsoft와 Open Source를 볼 때마다 다시 읽어야합니다. : – PTwr

+0

나는 믿기 힘들다는 것을 안다 :) ... – Dalorzo

+1

나는 여전히 악의에 빠져있어 내 얼굴에 IE6를 저주했다. ... 그리고 지금 그들을 보아라. o_O – PTwr