C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 105 を表示中)
■62773 / )  GetResponse による500エラー
□投稿者/ ぱち (3回)-(2011/11/01(Tue) 22:09:03)

分類:[.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)ではエラーは発生しません。

本件、ソースの修正等の対応で対処できるものなのでしょうか。
おはずかしながら、原因が特定できず上記の検討が行えません・・・。
どうぞ原因のご指摘と、出来れば解決策やヒント・参考となるサイトの情報などをよろしくお願いいたします。
返信 編集キー/


管理者用

- Child Tree -