POST dados de um arquivo de texto (lido por um cliente de desktop) para um servidor baseado ASP .NET

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Estou desenvolvendo uma aplicação cliente-servidor -. O servidor sendo um aplicativo web ASP .NET

O cliente (um aplicativo de desktop) precisa enviar dados contidos em um arquivo de texto para meu aplicativo web asp .net. Dados seria de aproximadamente 100 KB, em forma de texto multi-line.

O que é a melhor abordagem para POST esses dados para o servidor, uma vez que eu preciso para fazê-lo uma vez a cada 10 minutos ou assim?

Foi útil?

Solução

Se o arquivo é pequeno o suficiente para que você pode facilmente se encaixar na memória (que você quer que seja se você está enviando-o via POST), então você pode simplesmente fazer o seguinte:

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

Quanto lendo lado do servidor texto que você pode simplesmente usar o Page.Request.Form [ "fileContents"]

Outras dicas

Estou confuso; você diz que quer ele como um parâmetro POST, mas depois que você lê-lo de um cabeçalho ...? Essa seria a forma para campos típicos de correios, ou apenas o corpo da solicitação de dados brutos ...

Para enviar campos do formulário:

    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 um arquivo raw (não como uma forma, apenas o texto em si), o uso UploadFile; e para cabeçalhos, uso .Headers.Add.

Se os seus usos WebMethod HttpContext.Current.Request.Headers["errorLog"] em seguida, seu aplicativo cliente precisa enviar este costume http header ao realizar o pedido. Por favor note que http cabeçalhos não são destinadas para enviar grandes volumes de dados.

Em seu aplicativo cliente você poderia Adicionar uma referência Web para o serviço e usar a classe proxy gerado para substituir o GetWebRequest e adicionar seu costume http cabeçalho:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top