- - PR -
【VB.NET】WindowsアプリでサーバにHTTP経由でアップロードしたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-03 11:09
Haruka@VB.NETユーザです。 いつも参考にさせて頂いています。
標題の件ですが、いろいろ過去にQAもあがっていますが、なんともどうして いいのかわからないので、質問させて下さい。 WindowsアプリでサーバにHTTP経由で数100MByteのサイズのファイルを アップロードを実現するため、以下のようなスクリプトで実現しようとしました。 しかし、クライアント側のメモリ(リソース)が、アップロードするファイル サイズ分だけ消費され、数100MByte以上のサイズだと『内部サーバエラー』で落ちて しまいます。100MByteぐらいの容量であれば、問題なくすかすかいくのですが。 クライアントのリソースをできる限り消費しないような実装の仕方はありません でしょうか?何卒ご教示願います。宜しくお願いします。 ※そもそもFTPでやればよいのでは?HTTPでは無理だよ! という意見もあるかもしれませんが、ただ、広域LANの環境で、FTPポートは 許可していないという制約があります。 ※BASP21を使おうと思いましたが、サーバ側のリソースを消費し、軒並み アップロードに失敗し、使うことを断念しました。 Dim myWebClient As New WebClient Try Dim responseArray As Byte() = _ myWebClient.UploadFile(txtServerURL.Text.Trim & _ "/" & txtFileName.Text.Trim, "PUT", txtLocalPath.Text.Trim) MsgBox("アップロードが完了しました。", _ MsgBoxStyle.Information, "WINUPLOADTEST") myWebClient.Dispose() Catch eException As Exception myWebClient = Nothing MsgBox(eException.Message, MsgBoxStyle.Exclamation) End Try 【環境】 サーバ:Win2000sp3(メモリ8Gbyte、4CPU) クライアント:WindowsXP(メモリ512Mbyte) ※クライアントの仮想メモリもそれなりに確保。 | ||||
|
投稿日時: 2004-03-03 11:37
System.Net.HttpWebRequest でStreamに出力するのはどうでしょうか?
使ったことがないので外れかもしれませんが。 | ||||
|
投稿日時: 2004-03-03 22:08
この場合落ちるといっているのはサーバですか? UploadFileでもstreamを使って少しずつアップロードしているようですが。 修正>FileUpload→UploadFile [ メッセージ編集済み 編集者: Valhalla 編集日時 2004-03-05 23:26 ] | ||||
|
投稿日時: 2004-03-04 10:53
みなさん、返答ありがとうございます。
落ちているのはクライアント側です。 『内部サーバエラー(ERROR CODE:500)』と出しているのは クライアント側のメッセージです。 ちなみに、サーバのリソースもWATCHしているのですが、まったく? 消費していないような感じです。 クライアント側は512MByte、仮想メモリ含めて1GByteぐらい確保 しているのですが、200〜300MByteになると、クライアントの リソースが圧迫されて落ちてしまいます。 クライアントのリソースを極力消費しない実装の仕方はないものか 引き続き調査です。もしご存知の方、いらっしゃれば教えてください。 宜しくお願いします。 | ||||
|
投稿日時: 2004-03-04 11:07
これは、Webサーバがクライアントに渡すエラー情報ですが……。 有名どころでは404エラー(ページが見つからない)、なんてのと同類です。 [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-03-04 11:08 ] | ||||
|
投稿日時: 2004-03-04 12:26
確かに、エラーを返しているのは、Webサーバ(IIS)側ですね。 サーバ側での設定の問題がある?容量制限とか? IISについてはよくしらないので調べてみないとなんともわかりませんが。 でも、明らかにクライアント側のリソース圧迫が起因しているのは見て 取れるのです。メモリの消費分がアップロードファイルのサイズ分だけ 着実に増えていきます。 う〜ん、わからなくなった。 | ||||
|
投稿日時: 2004-03-04 23:53
アップロード処理はサーバー側のWebアプリケーションの挙動に
依存するはずです。 サーバー側では何を使ってアップロードデータを処理してますか? (ASP.NET・JSP・PHP・CGIなどなど…IISやApacheは無関係ですよ) ※ちなみに「サーバー側」のメモリがどんどん増えていくのは、 アップロード処理としてよくある仕様です。 | ||||
|
投稿日時: 2004-03-05 14:58
返答ありがとうございます。 Webアプリではなく、WindowsアプリでUPLOADをしようとしています。 従って、Webサーバ側でアプリは起動していません。 あと訂正ですが、 『内部サーバエラー(500)』ではなくて、クライアント側から 『WebClient要求で例外が発生しました』のエラーが返されていました。 どなたか、クライアントからWebサーバのほうにUploadする方法(リソースを消費しない方法) をご存知ないでしょうか?実績のある方いらっしゃいましたら、 宜しくお願いします。 |