- PR -

i-modeアクセスでBase-64エラー

投稿者投稿内容
Kondo
常連さん
会議室デビュー日: 2002/06/27
投稿数: 22
投稿日時: 2003-10-20 15:01
お世話になります。
Windos2000+.NET Framework1.0で、i-mode用アプリ(Calendarを使用)を稼動させています。
そのアプリで「アプリケーションでエラーが発生しました。Base-64文字配列の長さが無効です。」といったエラーが出るようになってしまいました。ただ、そのページに対してイントラからInternetExploreでアクセスしても正常に動作しています。i-mode携帯電話からのアクセスにおいてのみ、このエラーになってしまいます。
エラーが出るようになったタイミングで、2つのことを行っています。1つは、セキュリティパッチMS03-040〜045をWindowsUpadateであてたこと。2つ目は、ファイアウォールで、トラブル発生し、システムの再インストールを行ったらしいこと。2つ目は、別担当者のため現在詳細が不明です。
セキュリティパッチMS03-040〜045とこの問題が関係ある可能性等の情報をお持ちの方、また原因の切り分け方法について何かアドバイスなどありましたら、お願いいたします。
Kondo
常連さん
会議室デビュー日: 2002/06/27
投稿数: 22
投稿日時: 2003-10-20 16:48
質問したKondoです。
i-mode端末で出るエラーメッセージの全文は以下のようなものです。
ここから、何かわかりますでしょうか?
========================================
'/i' アプリケーションでサーバー エラーが発生しました。

Base-64 文字配列の長さが無効です。
説明:現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.FormatException: Base-64 文字列の長さが無効です。

ソース エラー:

現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下のスタック トレースを使って確認できます。
スタック トレース:

[FormatException: Base-64 文字列の長さが無効です。]
System.Convert.FromBase64String(String s) +0
System.Web.UI.LosFormatter.Deserialize(String input) +25
System.Web.UI.MobileControls.MobilePage.LoadPageStateFromPersistenceMedium() +93
System.Web.UI.Page.LoadPageViewState() +16
System.Web.UI.Page.ProcessRequestMain() +421

バージョン情報:Microsoft .NET Framework バージョン :1.0.3705.288; ASP.NET Version:1.0.3705.288
========================================
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-10-20 17:08
ども、ほむらです。
毎度の事ながら適当な発言です。^^;;;;;
---------
>Base-64 文字列の長さが無効です。
って言うところをヒントに思いつくのは改行コードにCRが含まれていないとか。。。
昔のqmailで似たような障害をきいたことがあります。

#改行コードが不正なため一行の限界を超えてしまうだったかな?<qmail

# あっよく読んだら以前はうまくいってたんですね。。。
# きっと違いますね(以上 追記)

[ メッセージ編集済み 編集者: ほむら 編集日時 2003-10-20 17:19 ]
Kondo
常連さん
会議室デビュー日: 2002/06/27
投稿数: 22
投稿日時: 2003-10-20 17:42
ほむらさん、ありがとうございます。
># あっよく読んだら以前はうまくいってたんですね。。。
はい、数ヶ月間、とくに問題もなく稼動していました。
>ヒントに思いつくのは改行コードにCRが含まれていないとか。。。
たしかにエラーが出ているのはTextViewで数行程度の表示をしているあたりです。改行はタグ<br>だけでCRとかは入れてませんけど。
InternetExplorerでのアクセスでは全く正常で、i-modeからのアクセスの時だけエラーになるというのが、困ったもんで、デバッグできないんですよね。
Gordie
ベテラン
会議室デビュー日: 2003/10/14
投稿数: 64
投稿日時: 2003-10-20 18:14
ViewStateの処理に失敗しているようですね。
ViewStateは実際にはフォームの全内容をBase64エンコードしていますから、
長いテキストを入れるとViewStateのBase64エンコード文字列も長くなります。
しかしi-modeなどのような端末だとあまり長い文字列を扱えないので、Base64エンコード文字列が変なところで切れてしまい、ViewStateを処理できなくなってしまうのです。
これはi-mode端末の問題ですから、セキュリティパッチもファイアウォールも関係ありません。

i-mode相手にViewStateを使うことはあまり考えないほうがよいでしょう。
Kondo
常連さん
会議室デビュー日: 2002/06/27
投稿数: 22
投稿日時: 2003-10-21 08:57
Gordieさん、ありがとうございます。

>これはi-mode端末の問題ですから、セキュリティパッチもファイアウォールも関係ありません。

でも、先週末までは、何の問題もなく動作していたのです。その2つのいずれかが原因になっているとしか思えないのです。

>i-mode相手にViewStateを使うことはあまり考えないほうがよいでしょう。

長い文字列と言っても通常20文字程度です。この程度の文字が扱えないとなると、モバイルWebフォームのTextViewそのものが使えないということになってしまいます。
Gordie
ベテラン
会議室デビュー日: 2003/10/14
投稿数: 64
投稿日時: 2003-10-21 09:26
Kondoさん、おはようございます。

ViewStateに格納されるのは、ViewStateが有効になっているフォームの全データです。
なので入力フォーム全体でどれだけの項目があるか、nameラベルにつけている名前の長さがどれだけあるかなどで、かなり長い文字列になることがあります。
私が以前受入テストをしたものでは、ViewStateのBase64文字列が2kBほどありましたし。

エラー内容は、Base64エンコードされた文字列が妙なところで尻切れになっているので解読できない、というエラーのようですので、ならばi-modeの容量制限に引っかかったな、と判断したわけです。
今まで正常に動いていたということですが、他の変更と偶然同じ時期に別のトラブルが発生することも時々ありますので。
#コンテンツ変換サーバとか入れてないですよね?

ViewState文字列にどのくらいの長さの文字列が入ってきているか調べられませんか?


[ メッセージ編集済み 編集者: Gordie 編集日時 2003-10-21 09:38 ]
Kondo
常連さん
会議室デビュー日: 2002/06/27
投稿数: 22
投稿日時: 2003-10-21 09:37
Gordieさん、おはようございます。

>フォーム全体でどのくらいの項目数がありますか?
問題が起こっているアプリが2つあるのですが、それぞれ、5個、10個程度です。

今まで問題なく使えていたアプリが、データの中身や端末に関係なく使えなくなってしまったということですので、アプリの構造状の問題では無いと思っているのですが。

>#コンテンツ変換サーバとか入れてないですよね?

このサーバに新たにインストールしたものはありませんし、i-mode関連のアプリはこの数ヶ月間、何も修正していません。

>IEで見た場合に、ViewState文字列はどのくらいの長さがありますか?

フォーム全体で20文字程度です。

[ メッセージ編集済み 編集者: Kondo 編集日時 2003-10-21 09:44 ]

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