|
分類:[.NET 全般]
現在Web上のaspxに、ファイル及び複数の設定情報をpostするアプリケーションを、VS2008,C#にて作成しております。 DOBON.NET様のサイト(http://dobon.net/vb/dotnet/internet/webrequestpost.html)を参考に 次のように作成してみました。
-----------ソース--------------
//文字コード System.Text.Encoding enc = System.Text.Encoding.GetEncoding("UTF-8"); //WebRequestの作成 System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL); //メソッドにPOSTを指定 req.Method = "POST";
//区切り文字列 string boundary = System.Environment.TickCount.ToString(); //ContentTypeを設定 req.ContentType = "multipart/form-data; boundary=" + boundary;
//POST送信するデータを作成 string postData = ""; postData = "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"AAA\"" + "\"\r\n\r\n" + HttpUtility.UrlEncode(TEXT, enc) + "\r\n" + "--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"BBB\"" + "\"\r\n\r\n" + System.Web.HttpUtility.UrlEncode(TEXT, enc) + "\r\n" + "--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"CCC\"" + "\"\r\n\r\n" + HttpUtility.UrlEncode(TEXT, enc) + "\r\n" + "--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"DDD\"" + "\"\r\n\r\n" + HttpUtility.UrlEncode(TEXT, enc) + "\r\n" + "--" + boundary + "\r\n" +
// ファイルはバイナリで送る "Content-Disposition: form-data; name=\"upfile\"; filename=\"" + HttpUtility.UrlEncode(FILENAME, enc) + "\"\r\n" + "Content-Type: application/octet-stream\r\n" + "Content-Transfer-Encoding: binary\r\n\r\n";
//バイト型配列に変換 byte[] startData = enc.GetBytes(postData); postData = "\r\n--" + boundary + "--\r\n"; byte[] endData = enc.GetBytes(postData);
//送信するファイルを開く System.IO.FileStream fs = new System.IO.FileStream(FILENAME, System.IO.FileMode.Open, System.IO.FileAccess.Read);
//POST送信するデータの長さを指定 req.ContentLength = startData.Length + endData.Length + fs.Length;
//データをPOST送信するためのStreamを取得 System.IO.Stream reqStream = req.GetRequestStream();
//送信するデータを書き込む reqStream.Write(startData, 0, startData.Length);
//ファイルの内容を送信 byte[] readData = new byte[0x1000]; int readSize = 0; while (true) { readSize = fs.Read(readData, 0, readData.Length); if (readSize == 0) break; reqStream.Write(readData, 0, readSize); } fs.Close();
reqStream.Write(endData, 0, endData.Length);
reqStream.Close();
//サーバーからの応答を受信するためのWebResponseを取得 System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)req.GetResponse(); ★ここで、エラーが発生します★
--------------------ソース----------------------
Exception.Messageは「リモート サーバーがエラーを返しました: (500) 内部サーバー エラーです」 と出ます。 メッセージをググったところ、ファイルサイズが大きい場合に出る、という記述を残した方がおりましたが、 技術文書などは見つけるに至れませんでした。 送るファイルはCSVファイルなのですが、確かにテストで使っている20000レコード(6.6MB)では 確実にエラーがでるものの、5000レコード(1.7MB)ではエラーは発生しません。
本件、ソースの修正等の対応で対処できるものなのでしょうか。 おはずかしながら、原因が特定できず上記の検討が行えません・・・。 どうぞ原因のご指摘と、出来れば解決策やヒント・参考となるサイトの情報などをよろしくお願いいたします。
|