2012-04-06 3 views
2

HTTP POST를 통해 XML 문서를 수신하는 웹 페이지를 설정해야합니다. POST 할 필요가 없습니다. POST를 받아야합니다. 어떤 물건이 이것을합니까? HTTP 처리기, 웹 서비스, webRequest, 스트림 또는 다른 것을 사용해야합니까? IIS 서버를 사용해야하고 C#을 선호합니다.XML이 포함 된 HTTP POST 요청 가져 오기

내가 해봤 ...

  1. 는 난 그냥 그들을 기다리고, 요청을 전송하고 있지 않다 때문에 내가 WebRequest 클래스를 사용할 수있는 것 같아요.

  2. "HttpRequest.InputStream"하지만 사용 방법이나 위치를 잘 모르겠습니다. 웹 서비스 또는 asp.net 응용 프로그램과 함께 사용해야합니까? 나는 간단한 웹 서비스 http://msdn.microsoft.com/en-us/library/bb412178.aspx을 시도했습니다 http://forums.asp.net/t/1371873.aspx/1

  3. 에 넣어 -하지만 난 방문하려고 할 때 "에 http : // localhost를 : 8000/EchoWithGet S = 안녕하세요, 세계?!"내가 얻을 " 웹 페이지를 찾을 수 없습니다. 오류 "

누구든지 도움이되는 유용한 코드 나 링크가 있다면!

편집 : 다른 프로그램에서 알림을 받으려고합니다.

+0

http://stackoverflow.com/questions/10017564/url-mapping Default.aspx를

<%@Page Inherits="WebApplication1._Default"%> <%@OutputCache Duration="10" Location="Server" varybyparam="none"%> <script language="C#" runat="server"> void Page_Init(object sender, EventArgs args) { } } </script> <html> <body> </body> </html> 

하여 default.aspx.cs

입니다 -with-c-sharp-httplistener –

+0

고마워,하지만 나는 네트워크 계층에서 벗어나려고 노력했다. – nubme

+0

@numbe, TcpListener가 아니므로 HttpListener이므로 NW 레이어와 아무 관련이 없습니다. 물론 여러분의 코드를 선택하십시오. –

답변

11

.ASPX 페이지 또는 일반 .ASHX handler을 사용할 수있는 IIS에서 호스팅 할 ASP.NET 응용 프로그램을 작성할 수 있습니다. 결과를 형식화 할 방법에 따라 달라집니다. HTML 또는 일부 다른 형식) 클라이언트에서 오는 요청 본문을 포함 할 Request.InputStream을 읽습니다.

public class MyHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     var stream = context.Request.InputStream; 
     byte[] buffer = new byte[stream.Length]; 
     stream.Read(buffer, 0, buffer.Length); 
     string xml = Encoding.UTF8.GetString(buffer); 

     ... do something with the XML 

     // We only set the HTTP status code to 202 indicating to the 
     // client that the request has been accepted for processing 
     // but we leave an empty response body 
     context.Response.StatusCode = 202; 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 
+0

아무 것도 반환 할 필요가 없으며 다른 프로그램에서 알림을 받고 있습니다. Request.InputStream을 시도하고 코드에 중단 점을 넣습니다. 알림을 수신하지 않는 것 같습니다. 내 코드는 위의 # 2 링크와 매우 유사합니다. 나는 Page_load에 넣었다. POST 요청은 매번 Page_load를 트리거합니까? – nubme

+1

HTTP는 요청/응답 기반 프로토콜입니다. 항상 무언가를 돌려 주어야합니다. 빈 상태로 200 상태 코드를 반환하면 클라이언트에 작업의 성공을 알릴 수 있습니다. –

+0

나는 코드를 시험해보고 알려줄 것이다. 도와 주셔서 감사합니다! =] – nubme

0

내가 전화 또는 핸들러를 사용하는 경우 확실하지 않다 :

다음은 일반적인 핸들러 (MyHandler.ashx)를 쓸 수있는 방법의 예입니다. 이 ... 난 지금까지 무엇을

namespace WebApplication1 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     HttpContext contex = Context; 
     MyHandler temp = new MyHandler(); 
     temp.ProcessRequest(context); 
    } 
    } 

    public class MyHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
     var stream = context.Request.InputStream; 
     byte[] buffer = new byte[stream.Length]; 
     stream.Read(buffer, 0, buffer.Length); 
     string xml = Encoding.UTF8.GetString(buffer); 

     ... do something with the XML 

     // We only set the HTTP status code to 202 indicating to the 
     // client that the request has been accepted for processing 
     // but we leave an empty response body 
     context.Response.StatusCode = 202; 
     } 

     public bool IsReusable 
     { 
     get 
     { 
      return false; 
     } 
     } 
    } 
}