2012-04-06 16 views
2

HTTP POSTを介してXMLドキュメントをリッスンするWebページをセットアップする必要があります。私はPOSTする必要はありません、私はそのPOSTを受け取る必要があります。どのようなオブジェクトですか? HTTPハンドラ、Webサービス、webRequest、Streamなどを使用する必要がありますか?私はIISサーバーを使用し、C#を好む必要があります。XMLを含むHTTP POSTリクエストを取得する

私はちょうどそれらを待って、要求を送信していないよので、私はWebRequestクラスを使用することができると思ういけない...

  1. を試してみました。

  2. "HttpRequest.InputStream"しかし、私はそれをどこに置くか、どこに置くかは分かりません。私はそれをWebサービスやasp.netアプリケーションで使用する必要がありますか?私は、単純なWebサービスhttp://msdn.microsoft.com/en-us/library/bb412178.aspxを試してみた http://forums.asp.net/t/1371873.aspx/1

  3. に入れて - しかし、私が訪問しようとすると、 "のhttp:// localhostを:8000/EchoWithGet S =こんにちは、世界!"、私が手に "ウェブページにエラーが見つかりません "

誰かが役に立つコードやリンクがあれば、素晴らしいです!

EDIT: 別のプログラムから通知を受け取りようとしています。

+0

http://stackoverflow.com/questions/10017564/url-mapping -with-c-sharp-httplistener –

+0

ありがとうございました。しかし、私はネットワーク層から離れようとしていました。 – nubme

+0

@numbe、それはTcpListenerではなく、HttpListenerなので、NWレイヤーとは何も関係ありませんが、もちろんあなたのコードを選択してください。 –

答えて

11

IISでホストするASP.NETアプリケーションを記述すると、.ASPXページまたは汎用の.ASHX handler(結果のフォーマット方法によっては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を試して、コードにブレークポイントを入れました。それは通知をキャッチするようではありません。私のコードは、上記のtry#2のリンクと非常によく似ています。私はPage_loadに入れました。 POSTリクエストは毎回Page_loadをトリガーしますか? – nubme

+1

HTTPは要求/応答ベースのプロトコルです。だから常に何かを返さなければなりません。空のボディを持つ200のステータスコードを返して、クライアントに操作の成功を知らせることができます。 –

+0

私は、コードを試してみようと思います。助けてくれてありがとう! =] – nubme

0

:ここ

あなたはジェネリックハンドラ(MyHandler.ashx)を書くことができる方法の例です。これは私がこれまで持っているものです...

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

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; 
     } 
     } 
    } 
} 
関連する問題