POST-данные из текстового файла (читаемого настольным клиентом) на сервер на базе ASP .NET

2

Я разрабатываю клиент-серверное приложение - сервер, являющийся веб-приложением ASP.NET.

Клиент (настольное приложение) должен отправить данные, содержащиеся в текстовом файле, в мое веб-приложение asp.net. Данные будут приблизительно 100 КБ в многострочной текстовой форме.

Каков наилучший подход к отправке этих данных на сервер, учитывая, что мне нужно делать это каждые 10 минут или около того?

Теги:
post
upload

3 ответа

2
Лучший ответ

Если файл достаточно мал, чтобы вы могли легко поместить его в память (который вы хотите, если вы отправляете его через POST), вы можете просто сделать следующее:

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

Что касается чтения текстового сервера, вы можете просто использовать файл Page.Request.Form [ "fileContents" ]

0

Если ваш веб-метод использует HttpContext.Current.Request.Headers["errorLog"], тогда ваше клиентское приложение должно отправить этот настраиваемый HTTP-заголовок при выполнении запроса. Обратите внимание, что заголовки HTTP не предназначены для отправки больших данных.

В своем клиентском приложении вы можете добавить веб-ссылку в службу и использовать сгенерированный класс прокси для переопределения GetWebRequest и добавить свой собственный http header:

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;
}
0

Я смущен; вы говорите, что хотите его как параметр POST, но потом вы читаете его из заголовка...? Это будет форма для типичных полей сообщений, или просто тело запроса для сырых данных...

Для отправки полей формы:

    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
    }

Для отправки необработанного файла (не как формы, только самого текста) используйте UploadFile; и для заголовков используйте .Headers.Add.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню