2009-07-30 4 views
2

Ich entwickle eine Client-Server-Anwendung - der Server ist eine ASP.NET-Webanwendung.POST-Daten von einer Textdatei (gelesen von einem Desktop-Client) auf einen ASP.NET-basierten Server

Der Client (eine Desktop-App) muss Daten, die in einer Textdatei enthalten sind, an meine ASP.NET-Webanwendung senden. Daten wären ungefähr 100 KB, in mehrzeiliger Textform.

Was ist der beste Ansatz, um diese Daten an den Server zu senden, vorausgesetzt, ich muss es alle 10 Minuten oder so tun?

Antwort

2

Wenn die Datei klein genug ist, dass Sie können leicht in den Speicher passen (was Sie es haben wollen, wenn Sie es über POST sind zu senden), dann können Sie einfach folgendes tun: Seite

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 

Soweit das Lesen der Textserver können Sie Verwenden Sie einfach die Page.Request.Form ["fileContents"]

0

Ich bin verwirrt; Sie sagen, Sie wollen es als POST-Parameter, aber dann lesen Sie es aus einem Header ...? Das wäre das Formular für typische Post Felder sein, oder einfach nur der Wunsch Körper für Rohdaten ...

Zum Senden von Formularfeldern:

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 
    } 

Für eine RAW-Datei (nicht als eine Form zu senden, nur die Text selbst), verwenden Sie UploadFile; und für Header verwenden Sie .Headers.Add.

0

Wenn Ihre Webmethode HttpContext.Current.Request.Headers["errorLog"] verwendet, muss Ihre Clientanwendung diesen benutzerdefinierten HTTP-Header senden, wenn die Anforderung ausgeführt wird. Beachten Sie, dass HTTP-Header keine großen Daten senden sollen.

In der Client-Anwendung können Sie eine Web-Referenz auf den Dienst hinzufügen und die generierte Proxy-Klasse verwenden, um die GetWebRequest außer Kraft setzen und Ihre benutzerdefinierten HTTP-Header hinzufügen:

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; 
} 
Verwandte Themen