POST des données d'un fichier texte (lu par un client de bureau) sur un serveur basé sur ASP .NET

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

  •  05-07-2019
  •  | 
  •  

Question

Je développe une application client-serveur, le serveur étant une application Web ASP .NET.

Le client (une application de bureau) doit envoyer les données contenues dans un fichier texte à mon application Web asp .net. Les données font environ 100 Ko, sous forme de texte multiligne.

Quelle est la meilleure approche pour poster ces données sur le serveur, étant donné que je dois le faire toutes les 10 minutes environ?

Était-ce utile?

La solution

Si le fichier est suffisamment petit pour que vous puissiez facilement l'adapter à la mémoire (ce que vous voudriez qu'il soit si vous l'envoyez via POST), vous pouvez simplement procéder comme suit:

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 ce qui concerne la lecture côté serveur de texte, vous pouvez simplement utiliser Page.Request.Form [" fileContents " ]

Autres conseils

je suis confus; vous dites que vous le voulez comme paramètre POST, mais ensuite vous le lisez dans un en-tête ...? Ce serait le formulaire pour les champs de publication typiques, ou simplement le corps de la requête pour les données brutes ...

Pour l'envoi de champs de formulaire:

    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
    }

Pour envoyer un fichier brut (pas sous forme de formulaire; juste le texte lui-même), utilisez UploadFile ; et pour les en-têtes, utilisez .Headers.Add .

Si votre méthode Web utilise HttpContext.Current.Request.Headers [" errorLog &]] , votre application client doit alors envoyer cet en-tête http personnalisé lors de l'exécution de la demande. Veuillez noter que les en-têtes http ne sont pas destinés à envoyer des données volumineuses.

Dans votre application client, vous pouvez ajouter une référence Web au service et utiliser la classe de proxy générée pour remplacer le GetWebRequest et ajoutez votre en-tête http personnalisé:

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top