テキストファイル(デスクトップクライアントによって読み取られる)からASP .NETベースのサーバーへのPOSTデータ
質問
クライアントサーバーアプリケーションを開発しています-サーバーはASP .NET Webアプリです。
クライアント(デスクトップアプリ)は、テキストファイルに含まれるデータをasp .net Webアプリに送信する必要があります。 データは、複数行のテキスト形式で約100 KBになります。
このデータを10分ごとに1回実行する必要がある場合、サーバーにこのデータをPOSTする最良の方法は何ですか?
解決
ファイルがメモリに簡単に収まるほど小さい場合(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" ]
他のヒント
私は混乱しています。あなたはそれを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
を使用します。
Webメソッドが HttpContext.Current.Request.Headers [" errorLog"]
を使用している場合、クライアントアプリケーションはリクエストの実行時にこのカスタムhttpヘッダーを送信する必要があります。 httpヘッダーは大きなデータを送信するためのものではないことに注意してください。
クライアントアプリケーションでは、 Web参照をサービスに追加し、生成されたプロキシクラスを使用して 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;
}