2011-08-10 68 views
8

私はXMLデータを含むHTTP POSTを受け取るプロジェクトに取り組んでいます。 HTTP POSTを受け取るようにHttpListenerを設定し、ACKを返すように設定します。HttpListenerを使用してXMLを含むHTTP Postを受信する方法

同様の機能を実装している例があるのでしょうか?そして、HttpListenerが同時に処理できるリクエストの数は?

クライアントからの要求を保存するメッセージキューがあります。テスト目的のためにリクエストをHttpListenerに送信するテストクライアントをセットアップする必要があります。 HttpListenerをテストするためにWebRequestなどを設定する必要がありますか?

答えて

11

HttpListenerを使用して着信HTTP POSTを処理することができます。ほとんどの場合、リスナーのチュートリアルに従うことができます。ここで私はそれをやっている方法である(この点に注意してください時点で1つの以上の要求を処理するために、syncronousである、あなたは、スレッドまたは少なくとも非同期メソッドを使用したいと思うでしょう。)

public void RunServer() 
{ 
    var prefix = "http://*:4333/"; 
    HttpListener listener = new HttpListener(); 
    listener.Prefixes.Add(prefix); 
    try 
    { 
     listener.Start(); 
    } 
    catch (HttpListenerException hlex) 
    { 
     return; 
    } 
    while (listener.IsListening) 
    { 
     var context = listener.GetContext(); 
     ProcessRequest(context); 
    } 
    listener.Close(); 
} 

private void ProcessRequest(HttpListenerContext context) 
{ 
    // Get the data from the HTTP stream 
    var body = new StreamReader(context.Request.InputStream).ReadToEnd(); 

    byte[] b = Encoding.UTF8.GetBytes("ACK"); 
    context.Response.StatusCode = 200; 
    context.Response.KeepAlive = false; 
    context.Response.ContentLength64 = b.Length; 

    var output = context.Response.OutputStream; 
    output.Write(b, 0, b.Length); 
    context.Response.Close(); 
} 

なる主要部分要求からのXMLは次の行です:

var body = new StreamReader(context.Request.InputStream).ReadToEnd(); 

これは、XMLを含むHTTP要求の本文を提供します。ストリームから読み込むことができる任意のXMLライブラリに直接送信できますが、迷子なHTTPリクエストもサーバーに送信された場合は、例外を監視するようにしてください。

関連する問題