- PR -

【VB.NET】WindowsアプリでサーバにHTTP経由でアップロードしたい

投稿者投稿内容
haruka
常連さん
会議室デビュー日: 2003/12/09
投稿数: 36
投稿日時: 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)
※クライアントの仮想メモリもそれなりに確保。

ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-03-03 11:37
System.Net.HttpWebRequest でStreamに出力するのはどうでしょうか?
使ったことがないので外れかもしれませんが。
Valhalla
ベテラン
会議室デビュー日: 2002/09/03
投稿数: 53
投稿日時: 2004-03-03 22:08
引用:

harukaさんの書き込み (2004-03-03 11:09) より:
しかし、クライアント側のメモリ(リソース)が、アップロードするファイル
サイズ分だけ消費され、数100MByte以上のサイズだと『内部サーバエラー』で落ちて
しまいます。100MByteぐらいの容量であれば、問題なくすかすかいくのですが。



この場合落ちるといっているのはサーバですか?
UploadFileでもstreamを使って少しずつアップロードしているようですが。

修正>FileUpload→UploadFile

[ メッセージ編集済み 編集者: Valhalla 編集日時 2004-03-05 23:26 ]
haruka
常連さん
会議室デビュー日: 2003/12/09
投稿数: 36
投稿日時: 2004-03-04 10:53
みなさん、返答ありがとうございます。

落ちているのはクライアント側です。
『内部サーバエラー(ERROR CODE:500)』と出しているのは
クライアント側のメッセージです。
 ちなみに、サーバのリソースもWATCHしているのですが、まったく?
消費していないような感じです。

クライアント側は512MByte、仮想メモリ含めて1GByteぐらい確保
しているのですが、200〜300MByteになると、クライアントの
リソースが圧迫されて落ちてしまいます。

クライアントのリソースを極力消費しない実装の仕方はないものか
引き続き調査です。もしご存知の方、いらっしゃれば教えてください。

宜しくお願いします。


ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-03-04 11:07
引用:

harukaさんの書き込み (2004-03-04 10:53) より:

『内部サーバエラー(ERROR CODE:500)』と出しているのは


これは、Webサーバがクライアントに渡すエラー情報ですが……。
有名どころでは404エラー(ページが見つからない)、なんてのと同類です。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-03-04 11:08 ]
haruka
常連さん
会議室デビュー日: 2003/12/09
投稿数: 36
投稿日時: 2004-03-04 12:26
引用:

これは、Webサーバがクライアントに渡すエラー情報ですが……。
有名どころでは404エラー(ページが見つからない)、なんてのと同類です。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-03-04 11:08 ]



 確かに、エラーを返しているのは、Webサーバ(IIS)側ですね。
 サーバ側での設定の問題がある?容量制限とか?
 IISについてはよくしらないので調べてみないとなんともわかりませんが。

  でも、明らかにクライアント側のリソース圧迫が起因しているのは見て
 取れるのです。メモリの消費分がアップロードファイルのサイズ分だけ
 着実に増えていきます。

 う〜ん、わからなくなった。

TakeOne
会議室デビュー日: 2004/03/04
投稿数: 9
投稿日時: 2004-03-04 23:53
アップロード処理はサーバー側のWebアプリケーションの挙動に
依存するはずです。
サーバー側では何を使ってアップロードデータを処理してますか?
(ASP.NET・JSP・PHP・CGIなどなど…IISやApacheは無関係ですよ)

※ちなみに「サーバー側」のメモリがどんどん増えていくのは、
 アップロード処理としてよくある仕様です。
haruka
常連さん
会議室デビュー日: 2003/12/09
投稿数: 36
投稿日時: 2004-03-05 14:58
引用:

TakeOneさんの書き込み (2004-03-04 23:53) より:
アップロード処理はサーバー側のWebアプリケーションの挙動に
依存するはずです。
サーバー側では何を使ってアップロードデータを処理してますか?
(ASP.NET・JSP・PHP・CGIなどなど…IISやApacheは無関係ですよ)

※ちなみに「サーバー側」のメモリがどんどん増えていくのは、
 アップロード処理としてよくある仕様です。


 返答ありがとうございます。
 Webアプリではなく、WindowsアプリでUPLOADをしようとしています。
 従って、Webサーバ側でアプリは起動していません。

 あと訂正ですが、
 『内部サーバエラー(500)』ではなくて、クライアント側から
 『WebClient要求で例外が発生しました』のエラーが返されていました。

 どなたか、クライアントからWebサーバのほうにUploadする方法(リソースを消費しない方法)
 をご存知ないでしょうか?実績のある方いらっしゃいましたら、
 宜しくお願いします。

スキルアップ/キャリアアップ(JOB@IT)