こんばんは、statemachineです。VMロールと、Connnectが来る気配がありませんw。どうやら、まとめて処理されているそうなので、がまんしようと思います。
SDK1.3 新機能の一つに、Full IISがあります。ぶっちゃけて言えば、従来の制限がきつかったWebRole(のIIS)が、Windows Serverと同等なIISを実装したということであって、それってどういうこと? 的な感じで腑に落ちない部分が多々ありました。また、どうやら今まで動作していたアプリがSDK1.3ベースでは動かなくなったなどのTweetなどもあり、余計に??になってきたところ、そんな疑問に答えるBlogが以下に掲載されました。
New Full IIS Capabilities: Differences from Hosted Web Core - Windows Azure - Site Home - MSDN Blogs
これをもとに、ゆるく纏めたいと思います。IIS方面は全くの素人ですので、内容の正確性は担保できませんw、あしからず。
HWCって何だ?
Hosted Web Core/Hostable Web Coreと呼ばれる、IIS7以降のWebコンポーネント。これを独自のプロセスに組み込んで利用することができる。以下のURLが多少参考になるかもしれない。また、インストールマニアックスでお世話になったAzure Companionなどは、WorkerRoleにHWCを組込んでWebサーバの機能を提供している。
SDK1.3以前のWebRole
SDK1.3以前のWebRoleは、WaWebHost.exeがホストプロセスとなり、前述したHWCを組み込んで動作していた。たぶんこんな図。
- RoleEntryPointクラス(OnStart/Run/Stopがあるクラス)と、Webアプリは同一プロセス、同一権限で動作。
- HWCベースだから1つのWebサイトしかホストできなかった(?)
SDK1.3以降のWebRole
通常のWindows Serverと同等の割と普通なIISになったと思われる。何らかの制限があるのかちょっとよく分からない。したがって、SDK1.3の新機能といわれている
- 複数サイト
- 仮想フォルダー
- 仮想アプリケーション
などなどの機能は、新規のでも何でもなくてようやく通常のIISと同じ土俵に立てただけだと。
WaIISHost.exeがホストプロセスとなり、RoleEntoryPointクラス実行する。Webアプリは、通常のIISと同じくw3wp.exeというワーカープロセスで動作。w3wp側からもRoleEntryPointクラスが参照できることから、WebRole1.dllは読み込まれていると思われる。
で、どうなるんだ?
結局のところ、同一プロセスで動作していたやつが、分離されたに過ぎない。これによって問題になるのは、権限とアプリケーションドメイン。
したがって、New Full IIS Capabilities: Differences from Hosted Web Core - Windows Azure - Site Home - MSDN Blogsでも言及されているように、
- スタティック変数を共有するシナリオは失敗。CloudStorageAccount.SetConfigurationSettingPublisherをRoleEntryPoint#OnStartで構成し、Webアプリ側でFromConfigurationSettingすると失敗する。Application_Start に持って行けば、これらは回避できる。
- コンフィグファイルが読めない。
などの問題が発生する。