ASP.NET Univarsal Providersのセッションプロバイダって、セッションの破棄もしてくれるの?という話題から。
結論から言うと、「期限切れのセッションは削除してくれます。但しパフォーマンスに問題がありそうなやり方で。」となります。
@kazuk さんにさらっと見てもらえたので先に結論がわかりました。ありがとうございます。
さて実際にその様を見てみましょうか。
ASP.NET Univarsal Providersのセッションプロバイダって、セッションの破棄もしてくれるの?という話題から。
結論から言うと、「期限切れのセッションは削除してくれます。但しパフォーマンスに問題がありそうなやり方で。」となります。
@kazuk さんにさらっと見てもらえたので先に結論がわかりました。ありがとうございます。
さて実際にその様を見てみましょうか。
さっきの投稿でも書いた System.Web.Providers ですが、名称としては ASP.NET Universal Providers というそうです。
簡単に何をするものか説明すると、「ASP.NET におけるセッションステート、メンバシップ、ロール、プロファイル機能を、SQL Compact と SQL Azure にも対応させるツール」 という感じでしょうか。パクリですけど。
Node.js、Ruby、Python を Windows Azure で利用する Smarx Role ~ クラウドカバー Episode 48 より引用
ASP.NET におけるセッションステート、メンバシップ、ロール、プロファイル機能を、SQL Compact と SQL Azure にも対応させるツール “ASP.NET Universal Provider” がアルファ版としてリリースされました。
これにより、これまでのオンプレミスな Windows & SQL Server という組み合わせに加え、低トラフィックな Web サイトでは共有ホスティング & SQL Compact を利用、トラフィックが多い Web サイトでは Windows Azure & SQL Azure を利用する、といったことが可能になります。
ということで便利でナイスなプロバイダなわけですが、現時点でnugetから入手できるASP.NET Universal Providerは 0.1です。
でも、ASP.NET MVC 3 Webロールテンプレートに含まれる System.Web.Providers は1.0扱い?なんですよね。アセンブリも違うもののようです。(中身まで見たわけじゃないですがバイナリは異なる)
そのうちNugetにもあがる気はしますが、とりあえず正式版?がASP.NET MVC 3 Webロールテンプレートには含まれてるようです。
ちなみにアセンブリは<プロジェクトフォルダ>\packages\System.Web.Providers.1.0 のLibにあります。EULAやReadme.htmlもあるので使い方とか参考にどうぞ。
これはちゃんと使いこなしたいですね!
※EULAのどこどう見たらGoLiveなのか詳しい人に教えてもらいたいところ…ちゃんと読めという話ですが。
※EULAの補足。nugetで入手できる0.1はALPHA版ということで、商用利用が制限されています。ただ、ASP.NET MVC 3 Webロールに含まれてる1.0のほうはこの制限がないので、商用利用OK、Go-liveとみていいと思います。
いろいろ盛り込んでくれますね!Azure Team!
先日の投稿でも書きましたが、Windows Azure Tools for Visual studio v1.4 (August 2011 Update)でASP.NET MVC 3のWebロールテンプレートが追加されました。
で、このASP.NET MVC 3なWebロールを使うと今まで面倒だったアセンブリの追加とかが不要なわけですが、そのまま何も気にせずデプロイするとエラーになります。
よくみる(?)画面ですね。
さて、この原因ですが Deploying the Windows Azure ASP.NET MVC 3 Web Role にもある通り、ASP.NET MVC 3 Webロールプロジェクトテンプレートに含まれてるWeb.configにて、SQL Expressなカスタムセッションを利用するようになっているのが原因です。
解決方法はWade Wegner氏が書いてるとおりSQL Azure使うように正しく接続文字列変えてあげると良いのですが、面倒な場合はsessionState属性のmodeをOffとかInProcにすればいいんじゃないでしょうか。(投げやり)
※というのもちゃんとアプリケーション作るときはこの辺きちんと考慮するだろうし、デフォルトのままデプロイしたりするのは訓練されたあじゅらーぐらいな気もするので…
まぁ、そのうち修正されるかもしれませんがちょっとしたbad know-howということで…
たけはらさんにTumblrで教えていただきました。
どうもこのASP.NET MVC 3 Webロールテンプレートで使っているセッションやメンバシッププロバイダ等各種プロバイダはEntityFrameworkベースのSystem.Web.Providersだそうです。
未来を先取りテンプレート!!
ということは、Bad know-howで問題点として片付けるんじゃなくて、新しいテクノロジを活用しよう!っていう方向に持っていくべきですかね。
たけはらさんありがとうございます。
ひさびさの開発者向け大型アップデート来ました。
Windows Azure Tools for Microsoft Visual Studio 2010 August 2011 です!
今までTools for VSは1.3ベースだったんですが、これで1.4ベースとなりました。
先日紹介したWindows Azure Toolkit for Windows Phone 7を実際に使ってみました。
※ Windows Phone Developer Toolsも入れておきましょう。
Windows Azure あるある:
せっかくデプロイしたのに「何かがおかしくて」BusyとAbortedを繰り返す
とまぁこういう状況を何とかデバッグするための小ネタです。
厳密ではないですが、ある程度の切り分けはできるんじゃないかな~的な。
※しばやん氏にASP.NET MVCだけでいいよと指摘頂いたので修正 (2011/05/29) 指摘ありがとうございます。
チャック全開兄者からパスが来たので、試してみます。
Visual Studio 2010でASP.NET MVC3 プロジェクトで開発する場合、本番環境に配置する為のアセンブリを追加したり、Binフォルダに一緒にコピーするように設定したりすごく面倒です。
特にWindows Azure上でASP.NET MVC3なWebアプリを展開する場合、気を付けないとアセンブリ不足で動作しないで凹むとかしょっちゅうです。中にはVisual Studio向けAzureプロジェクトテンプレートにMVC3を追加したり、いろいろされてる方もいらっしゃるようです。
でも面倒くさいですね(
NuGetで入るならまだしも。。
ということで、そのうち正式にWindows Azure SDKがASP.NET MVC3に対応すると思いますが、それまでのつなぎな手法を今日は紹介しておきます。
自分用メモ。
●PHP5.3とWinCacheのインストール (要Full IIS)
@echo off sc config wuauserv start= demand md appdata cd appdata cd .. reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d "%~dp0appdata" /f webpicmdline /Products: PHP53 /AcceptEula webpicmdline /Products: wincache53 /AcceptEula reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f xcopy php.ini "%programfiles(x86)%"\php\v5.3 /Y xcopy php_memcache.dll "%programfiles(x86)%"\php\v5.3\ext /Y net start w3svc
●アプリケーションプールのアイドルタイムアウトをゼロにする (要Full IIS)
@echo off %windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00
●IISが特定のIPアドレスからの接続だけアクセス許可するように制限を付ける (要Full IIS)
@echo off start /w pkgmgr /iu:IIS-IPSecurity %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/ipSecurity /allowUnlisted:True /commit:apphost %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/ipSecurity /+"[ipAddress='192.168.96.0',subnetMask='255.255.255.0',allowed='True']" /commit:apphost
●ファイル共有用にWindowsファイアウォールの設定を変更し、共有フォルダを作成する
@echo off netsh firewall set service type=fileandprint mode=enable profile=Current address=10.0.0.0/8 scope=custom net share appdata=%RoleRoot%\ /GRANT:yourusername(ex:RDP user),FULL
●IISの動的ファイルの圧縮を有効にする(特定のMIMETypeに対して) (要Full IIS)
@echo off %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/atom+xml',enabled='True']" /commit:apphost %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/xml',enabled='True']" /commit:apphost %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/atom%2bxml;charset=utf-8',enabled='True']" /commit:apphost
自分用メモ。Webロール用。
set PATH=c:\Program Files\Windows Azure SDK\v1.4\bin;%PATH% set PACKPATH="C:\temp\CSPack" set CSDEF="deploypackage\ServiceDefinition.csdef" set OUT=/out:deploypackage\sample.cspkg set SITES=/sitePhysicalDirectories:RoleFiles;Web;%PACKPATH%\RoleFiles set ROLE=/role:Web;%PACKPATH%\RoleFiles;bin\Role.dll /rolepropertiesFile:Web;deploypackage\role.txt cd %PACKPATH% cspack %CSDEF% %OUT% %SITES% %ROLE%
パスはこんな感じにしておいてください。
CSPack
├─DeployPackage
│ MakeDeploypackage.bat
│ role.txt
│ ServiceDefinition.csdef
│
└─RoleFiles
│ Web.config
└─bin
startup.cmd
role.dll
実行する場合はWindows Azure SDK Command Promptからやるのがいいです。
ただ下記の環境変数があれば普通のコマンドプロンプトでもいけそうですけどね。
ServiceHostingSDKInstallPath=C:\Program Files\Windows Azure SDK\v1.4\
ちなみにCSPackには隠された12番目の理論 コマンドライン引数 /noencrypt があります。
*.cspkgを証明書を使った暗号化しないのでCSPack関連のファイルだけ別PCに持って行ってパッケージングするときに便利。(SDKのインストールしたくない場合とか)
※でもまぁ非公式なので使わないほうがいいですね。
しかし綺麗なコマンドじゃないですな。
さとうなおきさんのツイートより。
Windows Azure SDK 1.4 Refreshを使用してWindows Azure Connectを有効にしたサービスパッケージをデプロイしてもWindows Azure Connectに繋がらない問題があるようです。
FixしたSDKがリリースされているので、一度Windows Azure SDKをアンインストールして再度インストールする必要がるようです。
Windows Azure Connect Team Blog > Windows Azure SDK 1.4 refresh
1) Windows Azure SDKをアンインストールします。
2) http://www.microsoft.com/windowsazure/getstarted/default.aspx ここから再度SDKをセットアップします。(Web Platform Installer経由です)
※再インストール後もバージョンかわってなさそうです…
ということでWindows Azure Connectを利用される方は注意しましょう。