Datos POST de un archivo de texto (leído por un cliente de escritorio) a un servidor basado en ASP .NET

StackOverflow https://stackoverflow.com/questions/1204930

  •  05-07-2019
  •  | 
  •  

Pregunta

Estoy desarrollando una aplicación cliente-servidor: el servidor es una aplicación web ASP .NET.

El cliente (una aplicación de escritorio) debe enviar los datos contenidos en un archivo de texto a mi aplicación web asp .net. Los datos serían de aproximadamente 100 KB, en forma de texto de varias líneas.

¿Cuál es el mejor enfoque para enviar estos datos al servidor, ya que necesito hacerlo una vez cada 10 minutos aproximadamente?

¿Fue útil?

Solución

Si el archivo es lo suficientemente pequeño como para que pueda guardarlo fácilmente en la memoria (lo que desearía que fuera si lo envía a través de POST), simplemente puede hacer lo siguiente:

string textFileContents = System.IO.File.ReadAllText( @"C:\MyFolder\MyFile.txt" );

HttpWebRequest request = (HttpWebRequest)WebRequest.Create( "http://www.myserver.com/myurl.aspx" );
request.Method = "POST";

ASCIIEncoding encoding = new ASCIIEncoding();

string postData = "fileContents=" + System.Web.HttpUtility.UrlEncode( textFileContents );

byte[] data = encoding.GetBytes( postData );

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

Stream dataStream = request.GetRequestStream();

dataStream.Write( data, 0, data.Length );

dataStream.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// do something with the response if required

En cuanto a la lectura del lado del servidor de texto, solo puede utilizar el Page.Request.Form [" fileContents " ]

Otros consejos

Estoy confundido; ¿Dices que lo quieres como un parámetro POST, pero luego lo lees de un encabezado ...? Ese sería el formulario para los campos de publicación típicos, o simplemente el cuerpo de solicitud para datos sin procesar ...

Para enviar campos de formulario:

    NameValueCollection fields = new NameValueCollection();
    fields.Add("name1","some text");
    fields.Add("name2","some more text");
    using (var client = new WebClient())
    {
        byte[] resp = client.UploadValues(address, fields);
        // use Encoding to get resp as a string if needed
    }

Para enviar un archivo sin procesar (no como un formulario, solo el texto mismo), use UploadFile ; y para los encabezados, use .Headers.Add .

Si su método web utiliza HttpContext.Current.Request.Headers [" errorLog "] , su aplicación cliente debe enviar este encabezado http personalizado al realizar la solicitud. Tenga en cuenta que los encabezados http no están destinados a enviar datos de gran tamaño.

En su aplicación cliente, podría Agregar una referencia web al servicio y usar la clase proxy generada para anular el GetWebRequest y agregue su encabezado http personalizado:

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    var req = (HttpWebRequest)base.GetWebRequest(uri);
    var value File.ReadAllText("path_to_your_file");
    req.Headers.Add("errorLog", value);
    return (WebRequest)req;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top