2011-08-10 27 views
8

Estoy trabajando en un proyecto que recibirá HTTP POST que contienen datos XML. Voy a configurar HttpListener para recibir HTTP POST y luego responder con ACK.cómo usar HttpListener para recibir HTTP Post que contiene XML

Me pregunto si hay algún ejemplo que implemente una funcionalidad similar? ¿Y cuántas solicitudes podría manejar HttpListener al mismo tiempo?

Tendré una cola de mensajes para almacenar las solicitudes del cliente. Y tendré que configurar un cliente de prueba para enviar la solicitud al HttpListener con fines de prueba. ¿Debo configurar una WebRequest u otra cosa para probar HttpListener?

Respuesta

11

Puede utilizar HttpListener para procesar HTTP POST entrantes, puede seguir prácticamente cualquier tutorial que encuentre para el oyente. Así es como lo estoy haciendo (tenga en cuenta que esto es síncrono, para manejar más de 1 solicitud a la vez, tendrá que utilizar hilos o al menos los métodos asincrónicos.)

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(); 
} 

La parte principal que recibe el XML a partir de la solicitud es la siguiente línea:

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

esto le da al cuerpo de la petición HTTP, que debe contener el código XML. Probablemente pueda enviarlo directamente a cualquier biblioteca XML que pueda leer de una transmisión, pero asegúrese de ver excepciones si una solicitud HTTP perdida también se envía a su servidor.

Cuestiones relacionadas