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

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

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

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

Ответы [ 3 ]

2 голосов
/ 30 июля 2009

Если файл достаточно мал, чтобы вы могли легко поместить его в память (что вы хотели бы, чтобы он был, если вы отправляете его через 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 голосов
/ 30 июля 2009

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

В своем клиентском приложении вы можете добавить веб-ссылку к службе и использовать сгенерированный прокси-класс для переопределения GetWebRequest и добавить свой собственный заголовок 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;
}
0 голосов
/ 30 июля 2009

Я в замешательстве; Вы говорите, что хотите это как параметр 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.

...