ASP.NET Univarsal Providers のセッションプロバイダを使ってみる

ASP.NET Univarsal Providersのセッションプロバイダって、セッションの破棄もしてくれるの?という話題から。

結論から言うと、「期限切れのセッションは削除してくれます。但しパフォーマンスに問題がありそうなやり方で。」となります。

@kazuk さんにさらっと見てもらえたので先に結論がわかりました。ありがとうございます。

さて実際にその様を見てみましょうか。

続きを読む →

ASP.NET Universal Providers

さっきの投稿でも書いた 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もあるので使い方とか参考にどうぞ。

image

これはちゃんと使いこなしたいですね!

※EULAのどこどう見たらGoLiveなのか詳しい人に教えてもらいたいところ…ちゃんと読めという話ですが。

※EULAの補足。nugetで入手できる0.1はALPHA版ということで、商用利用が制限されています。ただ、ASP.NET MVC 3 Webロールに含まれてる1.0のほうはこの制限がないので、商用利用OK、Go-liveとみていいと思います。

image

 

いろいろ盛り込んでくれますね!Azure Team!

Windows Azure ASP.NET MVC 3 Web Role で使っているプロバイダ

先日の投稿でも書きましたが、Windows Azure Tools for Visual studio v1.4 (August 2011 Update)でASP.NET MVC 3のWebロールテンプレートが追加されました。

で、このASP.NET MVC 3なWebロールを使うと今まで面倒だったアセンブリの追加とかが不要なわけですが、そのまま何も気にせずデプロイするとエラーになります。

image

よくみる(?)画面ですね。

さて、この原因ですが 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だそうです。

Introducing System.Web.Providers – ASP.NET Universal Providers for Session, Membership, Roles and User Profile on SQL Compact and SQL Azure – Scott Hanselman

未来を先取りテンプレート!!

ということは、Bad know-howで問題点として片付けるんじゃなくて、新しいテクノロジを活用しよう!っていう方向に持っていくべきですかね。

たけはらさんありがとうございます。

Windows Azure Tools for Microsoft Visual Studio 2010 August 2011

ひさびさの開発者向け大型アップデート来ました。

Windows Azure Tools for Microsoft Visual Studio 2010 August 2011 です!

今までTools for VSは1.3ベースだったんですが、これで1.4ベースとなりました。

続きを読む →

Add Deployable Assemblies を Windows Azure プロジェクトで使ってみる

※しばやん氏に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に対応すると思いますが、それまでのつなぎな手法を今日は紹介しておきます。

続きを読む →

Startup Tasks 小ネタ

自分用メモ。

●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 Endpointの接続が失敗する

さとうなおきさんのツイートより。

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を利用される方は注意しましょう。