メイン » 仕事の周辺 » .NET » ASP.NET Mobile

2008年08月02日

モバイル用ページ

今までモバイル用のページはAxKit専門でしたが、既存のPC用サイトのモバイル化なので、同じASP.NET使っておいた方が置き場所一緒でメンテナンスが楽ということで、初めてASP.NETでモバイル用ページを作成しました。
Webサービスが既に存在するので、PC版なら半日仕事、AxKitでも1日あれば十分な簡単なページですが、久しぶりにキレながら丸2日試行錯誤してました。
一番の失敗は、ここを読んで、締め切りないものの急かされていたのでASP.NET 2.0 サーバー コントロールを使ってやろうとしたこと。cookielessをtrueにしてエミュレータでログインが可能なところまで確認し、途中まで作成してもう一度確認すると、「ViewState は無効です。壊れている可能性があります」というよくわからないエラー。ページをクリックしていくたびにURLがビュンビュン伸びて心配だったこともあり、上記ページで「推奨」されているASP.NET 1.x モバイル コントロールを使うように切り替え…。
慣れないコントロールに苦労はしましたが、使ってみての感想は、これはこれで便利かも。特にObjectListがお気に入り。これに気づくまで苦労しましたが(^^;)。まずListにバインドしてそこからどうするのかわからず、しょうがないからASPのRepeaterコントロールをボトッと落としたらテンプレート内でしか使えないとか言われ…ということでとりあえず使ってみる前にちゃんと読んでおけばよかったというサイト。
モバイル デバイス用の Web サイトの開発(MSDN)
.NETでモバイル・サイト開発を始めよう(@IT)

投稿者 idic : 11:29 | コメント (0)

2008年08月11日

Base-64 文字配列の長さが無効です。

出来上がったはずのプログラムをサーバーに上げ、操作説明書作るためエミュレータで画面キャプチャしようとしたらエラーでまくりで、思いがけず時間がかかってしまいました(T_T)。
ログインフォームも、カレンダーコントロールも、オブジェクトリストもそれぞれ作った時にはちゃんとエミュレータで動くことをテスト済みで何の不安も無くPCだけで確認し作業を進めていたのに、完成してから使えないとは…で頭がくらくら。サーバーの設定が悪いかと思えばローカルでエミュレータでも同じエラーが再現するし…。それも必ず同じ場所でエラーが出るわけではなく、同じデータをもう一度検索するとちゃんと表示されたり。調べるとViewStateが壊れているのが原因とかあったので抽出する項目数減らしたり、半角にできるものは半角にしたりしても変わらず。で、散々苦労した後で探し当てた原因がこれ。エミュレータをIIに変えたら今のところこのエラーは見ていません。助かったよう。このサイトが無かったら今頃AxKitで書き換えてる頃です。

投稿者 idic : 00:07 | コメント (0)

ページに必要なセッション状態は、現在使用できません。

i-modeのエミュレータをIIに変えて「Base-64 文字配列の長さが無効です。」のエラーが消えたら今度は今まで動いていたカレンダーコントロールやオブジェクトリストのテストをしていると標記のエラー。携帯用なのでクッキーはfalseにしてあるしPCではちゃんと動いているし、またエラーの出るタイミングがバラバラだし、で今度こそやめようかと思ったら、原因はなんとこれでした…。ここ読むまではCookie?そんなの当然falseにしてますがな、と思いこんでました(^^;)。認証のformsタグに入れた cookieless="UseUri"と、mobileControls cookielessDataDictionaryType="System.Web.Mobile.CookielessData"があるのですっかり設定済みのつもりでおりました。このページ以前にも何度も似たような解決方法目にしてたのですが、ここ見るまでもう一度Config確認してみようという気が起きなかった(^^;)。

投稿者 idic : 01:00 | コメント (0)

その他もろもろ

同じことは繰り返したくないので、記憶に新しいうちに恥をしのでメモ
・SoftBank用のコンテンツビューワーでなぜかログインできない…端末タイプ変えたら今のところ動いている
・ページが見つかりません…オブジェクトリストの更新ボタンを押したら、同じページへのポストバックのはずなのにこのエラーでまたクラクラ。原因は普通のサーバーエラー(ViewStateのことを思いオブジェクトリストの項目減らしたのに、更新用Formでその値を取ってこようとしてこけてた)で、エラーページが見つかってなかったぽい(^^;)。
・今まで動いていたオブジェクトリスト内の「戻る」や「更新」のリンクが機能しなくなった…自動ログイン機能を追加しようと、LinkコントロールにDoCoMo用のutnアトリビュート追加するようにLinkのコントロール・アダプタを追加したのが原因。Linkの機能なんてたかが知れてると思ったらPC版ではJavaScript埋め込んだり色々してくれているっぽい。コントロールにutnアトリビュートが有るか無いかの判別を追加し、あるときだけ上書きに変更して解決。

これで全部出つくしたと信じたい…。

投稿者 idic : 01:22 | コメント (0)

2008年08月13日

カレンダーコントロールの日付入力ができない

リリースした途端、バグ報告(^^;)。カレンダーコントロールで日付を選択せず、「日付の入力」を選択すると日付入力後も画面が変わらず、そこから抜け出せないと。i-modeのエミュレータで試すと再現するじゃありませんか。確か動いていたはずなのに??でSoftBankのコンテンツビューワーで試したらちゃんと動くし、auでも動くし、となると最後に追加したistyleを追加するためのデバイスアダプタが犯人っぽい。HTMLソースを表示させて確認すると、日付を入力するテキストボックスのname属性が空になってる。ここのまねをして、i-mode用を書いただけで、ログイン用等のテキストボックスではちゃんと動いてるんですが、カレンダーコントロールで自動生成されるテキストボックスの場合は、textBox.IDでIDが取れないみたい。取得する方法を調べるのが面倒だったので、これがnullだったらreturnという荒業で回避(^^;)。
どうかこれで最後でありますように…。

投稿者 idic : 21:07 | コメント (0)

2008年09月09日

Openwave Phone Simulator V7

モバイル用ページを自分のau機で確認したらなぜかサーバーエラー。おかしい、どこもいじってないはずなのにとコピー元のプログラムを確認したら、なぜかこちらもサーバーエラー。あれっ、エミュレータでしか確認してなかったけ(^^;)。エミュレータでエラーが出ないということは端末ID取得部分のバグだとはわかるのですが、ローカルと違って詳細なエラーメッセージが出ないため、ソースを見直すもちゃんと動いているDoCoMoやSoftBankと同じことしかやっていない。
ローカルでエラーメッセージ確認できるようDoCoMoやSoftBankのエミュレータと同じようにau用のエミュレータでもHTTP_X_UP_SUBNOを設定できないものかと調べたら、情報少ないはず、最新版にすれば普通に設定可能でした。最新版といっても2005年6月に出ているようで。
HDMLに非対応なのと、一部文字化け(デフォルトの状態)しているのが気になりますが、お目当てのエラーメッセージは正規表現でアンダーバーをエスケープしていたため。ついついPerl時代の癖で、ややこしそうな文字はとりあえずエスケープしとけ、というのが災いしたようで。コンパイルの時に通ってしまうのが嫌ですね…。

投稿者 idic : 20:23 | コメント (0)