2009-07-30 7 views
2

Je développe une application client-serveur - le serveur étant une application Web ASP .NET.Données POST d'un fichier texte (lu par un client de bureau) vers un serveur 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 seraient d'environ 100 Ko, sous forme textuelle multiligne.

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

Répondre

2

Si le fichier est assez petit que vous pouvez facilement l'adapter à la mémoire (que vous voulez qu'il soit si vous l'envoyez via POST), vous pouvez simplement faire ce qui 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 du côté serveur de texte que vous pouvez il suffit d'utiliser la Page.Request.Form ["fileContents"]

0

Je suis confus; vous dites que vous le voulez comme un paramètre POST, mais alors vous le lisez d'un en-tête ...? Ce serait le formulaire pour les champs de poste typiques, ou tout simplement le corps de la demande pour les données brutes ...

pour envoyer des 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 (non comme une forme, il suffit de la texte lui-même), utilisez UploadFile; et pour les en-têtes, utilisez .Headers.Add.

0

Si votre méthode Web utilise HttpContext.Current.Request.Headers["errorLog"], votre application cliente doit envoyer cet en-tête HTTP personnalisé lors de l'exécution de la demande. S'il vous plaît noter que les en-têtes http ne sont pas destinés à envoyer de grandes données.

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

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; 
} 
Questions connexes