NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
82 stars 18 forks source link

RESTAPIのファイル登録で正常に登録されない時がある。 #1114

Closed ghost closed 4 years ago

ghost commented 4 years ago

RESTAPIを使ってファイル登録を行っていますが、 特定の環境(何か条件を特定できたわけではありません)で ファイル登録をした時にレスポンスデータが201が返ってくるですが、 実際にはファイル登録がされない場合があります。

現象が発生した環境は2つあり、 一つはADSL環境です。

確かにADSL環境は通信速度に影響があった可能性がありますが、 レスポンス201が返ってきましたのでこちらとしてはタイムアウトとしても処理が出来ません。

もう一つは光環境で30MB~50MBのファイルを登録が出来ないようです。 こちらで通信ログを見ていますがレスポンスは201が返ってきているので あくまで正常にアップロードされたとしか判断出来てない状態です。

こちらで想定できそうなことと言えば、 ・多重ログインによる不備 ・アップロード中にタイムアウト

この現象が多発するのであれば、プログラミング側での不備を疑うのですが、 まれに起こる、特定の顧客の環境での再現率が高いとなると そこの切り分けが出来ずに困っています。

タイムアウト自体は公開していないとのことですので、これ以上対処できない状況です。 考えられる原因はありますでしょうか?

よろしくお願いします。

goofmint commented 4 years ago

レスポンスのステータスと、そのボディの内容が知りたいです。例えばこんな感じで作成日が来るはずです。

{"createDate":"2013-09-03T10:24:41.214Z","fileName":"testfile4"} 

https://mbaas.nifcloud.com/doc/current/rest/filestore/fileRegistration.html

ghost commented 4 years ago

ちょっと形は違うのですが、下記のフォーマットでレスポンスのデータ取得しています。 データ登録日付,POST,http.Status,http.StatusText 020/03/13 21:36:43,06B,POST,201,Created が本来であれば返ってきます。

ユーザーさんのログを確認したところ、ファイルアップロードのAPIで このログが出力されてないので、レスポンスが返ってこず 何かしらのタイムアウトが発生して次の処理が走ってしまった可能性がありますね。

そういう現象は起こり得るのでしょうか? また、この現象が起こるときはどのような原因が考えられるますでしょうか?

タイムアウトによってエラーコードを確認できずに こちらのプログラム側の処理がすり抜けてしまった可能性があります。

goofmint commented 4 years ago

そういう現象は起こり得るのでしょうか? 起こらない訳ではないと思います。ちなみに無料版の場合、ファイルサイズは5MBまでになるのでご注意ください。有料版でも100MBまでになります。

https://mbaas.nifcloud.com/price.htm

また、この現象が起こるときはどのような原因が考えられるますでしょうか?

一番ありえるのはタイムアウトかと思います。ただ、その場合に201をステータスとして返却することはないと思います。利用されているHTTPライブラリ側で例外処理などを起こっているのが一般的じゃないかと…。

ghost commented 4 years ago

プランは有料版を利用しており100MBまでなので、そのあたりは大丈夫です。 アップロードしているサイズは30MB~50MBのファイルになります。

ADSL環境であれば起こり得ることは想像できますが、光回線の環境でも発生しているとのことです。 顧客ユーザーの環境で試した結果です。 1.社用のPCからアップロード・・・OK 2.別宅の高速なネットワークからアップロード・・・OK 3.通常利用する自宅のひかり回線からアップロード・・・NG

一番ありえるのはタイムアウトかと思います。ただ、その場合に201をステータスとして返却す>ることはないと思います。利用されているHTTPライブラリ側で例外処理などを起こっているのが>一般的じゃないかと…。 なるほど。確かにタイムアウトで201のステータスは確かに返さないですね。 VBScript(Msxml2.ServerXMLHTTP)を使っているのですが、そのあたりで例外処理が発生している可能性もあると言うことですね。

タイムアウトを設定することは出来ないのでしょうか?

goofmint commented 4 years ago

情報が少ないので何ともいえないのですが…。この辺りを確認されるのが最初かなと。

タイムアウトを設定することは出来ないのでしょうか?

VBScriptで実装したことがないので分かりませんが、あるとすればVBScript側でタイムアウトを指定するのが一般的かなと。

もしHTTPステータスが201でレスポンスボディもきちんと入っていて、それでもファイルがアップロードされていないとしたら、mBaaSの内部実装に関する話になるかと思います。その場合は調査が必要になるので、テクニカルサポートに問い合わせされる必要があるかと思います。