2009年09月30日

ウェブブラウザからSilverlightへのセッション(クッキー)の引き継ぎ方法について

Webアプリケーションを開発している場合、ログイン状態やログインユーザのデータを保持するために、ほとんどの場合セッション(厳密にはクッキー)を用いると思います(PCからウェブブラウザを用いたアクセスの場合)。
Webアプリケーションの一部機能をSilverlightを用いる場合、Webアプリケーションのサーバとウェブブラウザ間で利用しているセッションをSilverlightに対して引き継ぐ必要があります。なぜなら、引き継がない場合、Silverlight側で再度ログインする必要があるため、ユーザビリティが低下するため。

では、どうやって引き継ぐのでしょうか?答えは簡単です。

『何もしなくてもよい!』


SilverlightからWeb(Http)アクセスをする場合、主に

 ・WebClient
 ・HttpWebRequest
 ・Webサービスへアクセスするための自動生成されたクラス

クラスを使用すると思いますが、デフォルトでは、全てのクラスにおいてSilverlightをホストしているウェブブラウザとセッションを共有するようです。

Webアクセスするために上記クラスを何度newしても、また別クラスをnewしても同じセッションが共有されます。
当然、Silverlightからアクセスしたサーバ側でセッションを操作した場合、Silverlightをホストしているウェブブラウザにも操作が反映されます。

要するに、SilverlightからのWebアクセスは、Silverlightをホストしているウェブブラウザを通して行われることになります。

自分は、これに気付かずに、かなりの時間悩んでしまいました。


逆に、ウェブブラウザとセッション(クッキー)を共有したくない場合、どうすればよいのでしょうか?

「WebRequest」クラスには、staticなメソッドとして、RegisterPrefix()が用意されており、この第2引数に、「System.Net.Browser.WebRequestCreator.ClientHttp」を指定します。

コード例)
IWebRequestCreate creator = System.Net.Browser.WebRequestCreator.ClientHttp;
WebRequest.RegisterPrefix("http://", creator);
WebRequest.RegisterPrefix("https://", creator);


※ほかにも方法があるかもしれませんが、自分が調べて確認できた方法は、上記方法だけでした。

上記コードを1度実行すると、その後作成する、
 ・WebClient
 ・HttpWebRequest
 ・Webサービスへアクセスするための自動生成されたクラス
クラスは、全てウェブブラウザとクッキーを共有しません。
また、上記クラスをnewするだけでは、新たにnewしたオブジェクト同士でもクッキーは共有されません。

オブジェクト間でクッキーを共有するためには、
オブジェクトのCookieContainerプロパティを呼び出して、同一のCookieContainerオブジェクトをセットする必要があります。
ただし、WebClientにはCookieContainerオブジェクトをセットできないのと、「Webサービスへアクセスするための自動生成されたクラス」でCookieContainerプロパティを呼び出すと例外が発生してしまい、HttpWebRequestのみまともに使用できました。
なぜ例外が発生するかまで原因を突き止めることができませんでしたm(__)m

この状態を元に戻すには、RegisterPrefix()に「System.Net.Browser.WebRequestCreator.BrowserHttp」を指定します。
問題点として、現在どちらが指定されているか取得する方法がないので、あまり想定できませんが、同一アプリケーション内で切り替えて処理を行う場合、現在どちらを指定しているかを保持するフラグを用意したほうがよいと思います。


Silverlight⇔ウェブブラウザとのセッション(クッキー)の共有方法について、まとまった資料がなかったため、今回エントリーにしました。
(デフォルトで共有されているため、当り前なのかも知れません(>_<)


最後に、今回のことを調べる上で参考にしたページを挙げておきます。
Silverlight による HTTP 通信とセキュリティ
・ClientHttpとBrowserHttpを指定した時の動作の違いが記載されています。

Silverlight:ブラウザーまたはクライアントによる HTTP 処理を指定する

Silverlight:Cookie の取得と設定を行う
posted by しおしおプログラマ〜 at 01:11 | Comment(2) | TrackBack(0) | Silverlight

2009年09月25日

アウト オブ ブラウザ (Out of Browser)

今回は、Silverlight 3 の新機能であるアウトオブブラウザについて説明したいと思います。
アウトオブブラウザについて簡単に説明すると、Silverlightにおけるブラウザー外実行環境の提供です。

アウトオブブラウザ機能を有効にする方法は、VS2008の場合、
Silverlight3プロジェクトを[右クリック]→[プロパティ]を選択するか、
VS2008のメニューにある[プロジェクト]→[プロパティ]を選択してください。
次に、Silverlightタブ(1番上、デフォルトで選択されています)を選択します。

outobbrowser.jpg

Silverlightプロジェクトの設定画面が開いたら、「アプリケーションのブラウザー外実行を有効にする」にチェックをつけます。
これで、Silverlightを右クリックした時に表示されるメニューに「このコンピュータに○○をインストールします」というメニューが表示されるようになります。

さらに詳細な設定は、【ブラウザー外実行の設定】ボタンを押下して表示される設定画面にて可能です。
設定内容については、
『MSDN:方法: ブラウザー外実行サポート用にアプリケーションを構成する』
に説明があります。

前回のエントリにも記載した通り、ライフゲームにもアウトオブブラウザを実装予定ですが、アウトオブブラウザ状態の詳細設定をもう少しきめ細かく出来たらなと思います。
例えば、ウィンドウサイズの固定や最大化の制限など。
この辺りは、アウトオブブラウザの実現方法にも起因しているのかも知れませんね。
アウトオブブラウザの実現方法や、その他アウトオブブラウザの情報については、こちらに詳しい情報がありました。

ただ、この機能、このままで終わるとは思えないので、次バージョン以降も期待したいですね。
posted by しおしおプログラマ〜 at 00:17 | Comment(0) | TrackBack(0) | Silverlight

2009年09月18日

Silverlightでライフゲーム (5)

Expression Blend 3 の日本語版が公開されたということで、以前作っていたライフゲームをSilverlight3で作成してみました。(ただリコンパイルしただけですが(;´Д`))



とは言え、ただリコンパイルしただけでは面白くないので、機能を追加しました。
新機能では、マウスクリックで自分の好きなところにライフを配置できます。
これにより少し大変ですが、有名なライフゲームの配置等試すことが可能になります。

次回では、Silverligth3の新機能である「アウトオブブラウザ」、「SaveFileDialog」を利用した状態保存機能を実装したいと思います。
これで、ライフゲーム開発は一段落かな(^^;
posted by しおしおプログラマ〜 at 23:02 | Comment(0) | TrackBack(0) | Silverlight

2009年09月16日

Silverlight 3 Tools インストール時の致命的エラー & その他もろもろ

一部環境下(自分の環境?)だけかと思いますが、Silverlight 3 Tools インストール時に致命的エラーが発生します。

エラーが発生した環境構築手順は以下です。

1.VS2008インストール
2.VS2008 SP1 インストール
3.Blend2 インストール
4.Blend2 SP1 インストール
5.Silverlight 2 tools インストール
※ここで、Silverligth2の開発環境が構築された

6.Silverlight 3ランタイム インストール
7.Expression Studio 3 インストール
8.Silverlight 3 tools インストール
※9で致命的エラー発生

全てを連続して行ったわけではないので、うろ覚えです。

Silverlight 3 toolsは、ココから入手。

致命的エラーが発生すると、VSからSilverlightプロジェクトが作成できなくなります。

この時は、深く原因を追うことなく、VS2008、Expression Studio3、Blend2およびそれらに付随するものをアンインストール後、再インストール(3〜6はインストールしない)することで、Silverlight 3 toolsをインストールすることができました。

結局、何が悪いのか分かりませんが、Silverlight2関係(特にSilverlight 2 tools)があやしいと思い、ほぼ同じ環境下にあった別PCでは、
・Blend2 アンインストール
・Silverlight 2 tools アンインストール
・Silverlight 3ランタイム アンインストール
を実行後、Silverlight 3 tools のインストールを行い、無事成功しました。

致命的エラーが発生してからも、上記を行えば成功したかもしれませんね。


ここで、無事インストールが成功し、Silverlight3プロジェクトをVSから作成できるようになり喜んでいましたが、別の問題を発見しました。

VSのソリューションエクスプローラーからプロジェクトやxamlファイルを右クリックすると、以前はメニューに「Blendで開く」という項目があった気がしますが、なくなっています。
また、Blend3からボタンのClickイベント用関数を追加しても、VSが開かず、Blend内でソースが表示されます。

これが仕様なのか、それともSilverlight 3 toolsが、実はBlend3の日本語版に対応していないのか分かりませんが、前バージョンの挙動から変更され、微妙に使いにくいです。(すぐ慣れるのかもしれませんが。。。)
もし、この現象が不具合且つ修正方法をご存知の方がいらっしゃいましたら、ぜひともご連絡をお願いしますm(__)m。


以上、今回は長々と書きましたが、誰かの助けになれば幸いです。




posted by しおしおプログラマ〜 at 01:56 | Comment(1) | TrackBack(0) | Silverlight

2009年09月15日

スズムシ最終報告

ぜんぜん報告しておりませんでしたが、お盆くらいから順調に羽化が始まり、無事全匹羽化しました。また、お盆明けから早いものは泣き出しました。

始めはうまく鳴けませんでしたが、その後徐々に上達し、うるさいくらいになりました。今では、鳴き声がかすれてきております。そろそろ寿命でしょうか(・人・)



結局、長野県でも特別変わったことをする必要なく、孵化→羽化→鳴かせることまで出来たので、大成功でした手(チョキ)

来年は、また別の虫に挑戦したいと思います。
posted by しおしおプログラマ〜 at 00:09 | Comment(0) | TrackBack(0) | スズムシ

2009年09月14日

Expression 3 日本語版公開

遅ればせながらですが、
http://www.microsoft.com/japan/products/expression/archive/20090910_ex3jp.aspx
Expression 3 の日本語版が Subscription 向けに公開されましたね。

というわけで、再度 Silverlight 3の開発環境をまとめたいと思います。

・Visual Studio 2008 SP1 + Silverlight 3 Tools
・Visual Web Developer 2008 Express SP1 + Silverlight 3 Tools
・Expression Blend 3

Silverlight 3 Toolsは
こちらよりダウンロード可能です。

最後に、今頃感バリバリですが、Silverlight3の新機能紹介記事を挙げておきます。
Silverlight 3、ここがすごい!

自分的には、『Perspective 3D』がすごく気になりますね。
posted by しおしおプログラマ〜 at 23:42 | Comment(0) | TrackBack(0) | Silverlight

2009年08月12日

スズムシ途中経過

スズムシが生まれて1ヶ月以上たちましたが、順調に大きくなってきております。

少しですが、撮ってある写真を公開。





ケースも手狭になってきたため、小さいのを一つ追加で購入。しかし、小さすぎて購入した木が置けない。。。しかも、引っ越し中に数匹逃げ出したりして、苦労しましたふらふら
やはり、始めから大きめのケースを用意すべきでしたね。

で、実は数日前に1匹オスが羽化していました。今後がますます楽しみですわーい(嬉しい顔)
posted by しおしおプログラマ〜 at 21:10 | Comment(0) | TrackBack(0) | スズムシ

2009年06月28日

奇跡が起こった2

鈴虫が生まれたので、一度土をしっかりと湿らそうと、いったん鈴虫を退避させようとしました。
すると、結構な数のあかちゃんが生まれてましたわーい(嬉しい顔)



#今回は、はっきりと写真が撮れました(^^;
写真には9匹しか映っておりませんでしたが、全部で10匹生まれていました。今後が楽しみになりましたが、ちょっと生まれすぎな気が。。。
全匹が順調に大きくなれば、虫かごを新調しないといけないかもですね。
posted by しおしおプログラマ〜 at 16:39 | Comment(0) | TrackBack(0) | スズムシ

2009年06月22日

奇跡が起こった

スズムシ。
1週間に1〜2回、土に水を吹きかけたりしていました。
また、最近は温かい時は外に出したりしていました。

でも全く変化なく、自分の管理方法(少しですが、卵に直接水を吹きかけたりしてたので。卵を撒いた状態で土を湿らす方法がよくわからなかったのですが。。。)が間違っていたのかな〜とか、やっぱり寒い所ではダメかな〜と思ってたのですが、昨日なにやら動くものを発見。

始め、アリが入り込んだかと思ったのですが、よく見ると小さな髭がありました。

「こ、これは鈴虫のあかちゃんか〜!!!」


孵ったのは2〜3匹ですが、頑張って大きく育てたいと思います。

suzumushi2.png
写真。思いっきりピンボケですねふらふら


次は、もっとはっきり映った写真を取りたいです。。。


posted by しおしおプログラマ〜 at 21:10 | Comment(0) | TrackBack(0) | スズムシ

2009年06月21日

Silverlightでライフゲーム (4)

基本的な機能の実装が全て完了しました\(^o^)/。



前回からの変更点は、
・フルスクリーン機能の実装
・壁有り/壁無し選択の実装
です。

フルスクリーン機能は、Silverlightをフルスクリーンモードに切り替え出来ます。
壁有り/壁無し機能では、壁をなくすことにより、上下/左右の端と端をつなげることができます。

『注意事項』
通常表示⇔フルスクリーン表示切り替え時に、切り替えに時間がかかります。原因は、大量のコントロールを動的に追加・削除しているからだと思われますが、解決策は今のところありません。。。
posted by しおしおプログラマ〜 at 00:24 | Comment(0) | TrackBack(0) | Silverlight