XMLHttpでPOSTするファイルの最大サイズ

解決


ぅぃ  2004-02-20 02:15:51  No: 82157  IP: [192.*.*.*]

いつもROMですがお世話になっております。

XMLHttpを使ってXMLファイルをサーバに送信したいのですが、
ファイルサイズが1MB以内でないとエラーになってしまいました。
20MB超になることがあるこのファイルをできれば一発で送信したいのですが、
1MBという制限はどの部分で設定されているものなのかご教示お願いいたします。


サーバ側はWindows2003で、ASP.NETのページPOSTしています

-------------以下ソース

    Dim oHttp  As New MSXML2.XMLHTTP
    Dim sURI As String
    sURI = "http://〜〜〜/receiver.aspx"
    
    Dim doc As New DOMDocument
    doc.Load ("C:\〜〜〜\Data.xml")
      
    oHttp.Open "POST", sURI, False
    oHttp.send doc 'Sendで落ちる

編集    削除
岡田 之仁  2004-02-20 03:28:55  No: 82158  IP: [192.*.*.*]

この手の話は、他にもあったのですが、適切な解決策は
見つけていません・・・

http://support.microsoft.com/default.aspx?scid=kb;ja;311730

こちらよりは、

http://support.microsoft.com/default.aspx?scid=kb;ja;303326

こちらの方が、関係しているのでは・・・と思いますが・・・

それと、サーバー側の問題の場合も想定されますが、クライアント側
のMSXMLパーサーのバージョンの問題もあるようです。

ご確認下さい。

以上。

編集    削除
ぅぃ  2004-02-25 07:05:10  No: 82159  IP: [192.*.*.*]

ありがとうございます。
アップロード時のみならず、ファイルが大容量になった場合のダウンロード時にも、原因がよくわからないエラーが出るようになってしまいました
だいぶ調べたんですけどあまり時間もないので、今回の案件ではファイルを分割して対処することにします。

MSXMLパーサのバージョンの問題は私も聞いたことがあったので、MSDNで調べたんですが具体的なことを見つけることができませんでした。
何か手がかりありませんかね…

編集    削除
魔界の仮面弁士  2004-02-25 18:18:17  No: 82160  IP: [192.*.*.*]

普段、(ASP.NET ではなく)ASP を相手に XMLHTTPを利用していますが、
・数十バイト〜500KB程度のタブ区切りデータ(Lf改行)を、
  XHTMLページ中のJScriptより、XMLHTTP.send()でASPなサーバに送信する。
・IISサーバ上に保存されている、300KB〜6MB程度のXMLファイル(UTF-8)を、
  クライアントのWSFファイル中のVBScriptにて、XMLHTTP.send()で受信する。
といった処理を、問題なく行えています。(httpでもhttpsでも)

使用しているパーサは、サーバ/クライアント共に MSXML4 SP2。
OSは、サーバがWin2000、クライアントはNT4/98/98SE/2000/XPです。

> よくわからないエラーが
どのコードを実行した時に、何というエラーになったのでしょう?

編集    削除
ぅぃ  2004-02-26 06:16:22  No: 82161  IP: [192.*.*.*]

ええとですね、受信側はこんな感じです。

    Dim oHttp  As New MSXML2.XMLHTTP
    Dim sURI As String
    sURI = "http://〜〜〜/requestfile.aspx"

    Dim doc As New DOMDocument
    doc.Load ("C:\〜〜〜\postdoc.xml")

    oHttp.Open "POST", sURI, False
    oHttp.send doc

    Dim oADOStream As New ADODB.stream
    oADOStream.Type = 1
    oADOStream.Open
    oADOStream.Write(oHttp.responseBody)
    oADOStream.SaveToFile distpath, 2
    oADOStream.close

クライアント側のsendメソッドで、色々と引数の入ったXMLファイル(4KBほど)をPOSTして、15MB程度のXMLファイルを受信しようとした場合に、エラーの画面のソースが保存されます。

>次のエラーが発生しました: 
>受信処理中にエラーが発生しました. 
>システムが以下のエラーを返しました: 
>    (104) Connection reset by peer
>ネットワークからデータを受信している間にエラーが発生しました.再度リクエストしてください. 

原因を探っている間に、同じ条件でも一時は受信が成功することもありましたが、現在はダメなようです。

動的に生成するのではなくあらかじめ用意した15MBのXMLファイルや、生成するデータをResponse.Writeせずそのままサーバ側に保存するのは成功したり、
POSTするXMLファイルが3KB、生成されるXMLファイルが10MB程度なら常に正常に受信できるようなので余計に腑に落ちません。
エラーの発生状況すら特定できてません…

編集    削除
魔界の仮面弁士  2004-02-26 08:06:12  No: 82162  IP: [192.*.*.*]

> oADOStream.Write(oHttp.responseBody)
サーバーがXML文書を返すのであれば、ADODB.Streamを経由せずとも、
   oHttp.responseXML.save distpath
だけでファイルに保存できますよ。

> エラーの画面のソースが保存されます。
私にはそのメッセージが、ASP.NETが返すエラーなのか、それとも、中継サーバ
(プロキシやファイアウォール等)が返したエラーなのかは判断できませんが、
少なくとも、VB側ではなく「サーバ側からエラーが報告された」という事ですよね。


まず、サーバ側にデータが正しくPOSTされているかどうかを、InetSpy等で確認してみてください。

例えば、送信しているXMLそのものに問題があったりはしませんか?
(上記のコードだと、postdoc.xmlが読み込みが終わる前に送信される可能性がありそうです)

send自体には問題が無い様であれば、それをIISが正しく受け取れているかどうかを確認してみてください。
・Request.TotalBytesは、送信されたデータ量に等しいか?
・Requestストリームから、XMLデータを取り出せているか?

データまでは受け取れているようであれば、ASP.NETでの応答処理のプログラムに
問題が無いかを確認してみて下さい。

それも問題が無い様であれば、ネットワーク自体に問題が無いかどうかも確認してみてください。

編集    削除
ぅぃ  2004-03-03 00:28:53  No: 82163  IP: [192.*.*.*]

ありがとうございます
今はこれを使う仕事から離れて別のことをしているのですが、いずれまた使うことがあると思いますのでその時確認してみます!

編集    削除