Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Full IISでWebロールを使いこなそう

Windows Azure新機能チュートリアル(3)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/06/09 14:00

ダウンロード sample.zip (1.1 MB)

 本稿では、Windows Azure SDK 1.3によって追加されたFull IIS機能について概要と使用方法について紹介します。Full IIS機能によって、従来のWindows Azureでは利用できなかった複数サイトの構成や、仮想ディレクトリ、仮想アプリケーションの構成が可能になります。

目次

はじめに

 本稿では、Windows Azure SDK 1.3によって追加されたFull IIS機能について概要と使用方法について紹介します。Full IIS機能によって、従来のWindows Azureでは利用できなかった複数サイトの構成や、仮想ディレクトリ、仮想アプリケーションの構成が可能になります。

対象読者

  • Windows Azureの新機能に興味のある方。
  • Windows Azureのサブスクリプションを持っており、Azureを利用したことがある方。

必要な環境

  • Windows Azureサブスクリプション
  • Visual Studio 2010もしくは、Visual Web Developer 2010 Express
  • Windows Azure Tools for Microsoft Visual Studio 2011.3以降 (Windows Azure SDK 1.4含む)

 なお、本稿はWindows Azure SDK 1.3で追加された新機能説明ですが、執筆時点での最新版はWindows Azure SDK 1.4更新版です。Windows Azure SDK 1.3で発生していた、いくつかの問題が修正されているため、最新版の利用をお勧めします。また、本稿は、Windows Azure SDK 1.4 更新版で確認を行っています。

Full IISとは

 Windows Azure SDK 1.3以降のWebロールでは完全なIISの機能を利用することができるようになりました。Full IISでは、「前回」紹介した権限昇格機能と組み合わせることにより、以下の内容を実現できるようになります。

  • 複数サイトの構成
  • 仮想ディレクトリ、仮想アプリケーションの構成
  • 管理者権限との組み合わせによるIISの構成変更
  • Web配置によるアプリケーションの発行(注1
注1

 Windows Azure SDK1.4更新版より利用可能です。

 Windows Azure SDK 1.3以降では、Webロールを作成すると既定でFull IISが構成されます。リスト1は、Webロールプロジェクトを作成した直後のサービス定義ファイル(ServiceDefinition.csdef)です。Sites要素が追加されていることが確認できますが、これがFull IISの定義です。このSites要素をコメントアウトすることによって、従来と互換があるモードで動作させることができます。

リスト1 Webロール作成直後のサービス定義ファイル。
  <WebRole name="WebRole1">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>

 さて、Full IISは、従来のWebロールとは何が異なるのでしょうか。Windows Azure SDK 1.2以前のWebロールは、Webサーバーの機能にHosted Web Core(HWC)と呼ばれる機構を利用して実装されていました。これはIISを使ってWebサーバー構築するのではなく、独自に用意したプロセスにIISコンポーネントを組み込み、Webサーバーの機能を実装する方法です。したがって、Webロール1つに1つのアプリケーションしかホストすることができないなど制約がありました。

 Windows Azure SDK 1.3よりWebロールのWebサーバーはIISそのものとなり、各種制約は取り払われています。Windows Azureでは、これをFull IISと呼んでいます。したがって、Full IISと言っても特別なものではなく、通常のWindowsサーバーで利用していたIISが、Windows Azureでもそのまま利用可能になったということです。

HWCとFull IISの違い

 Full IISが公開された当時、いままで正常に動作していたアプリケーションプールが動かなくなったという報告が数多く見られました。これは、HWCとFull IISの違いに起因するものです。ここでは、未然にトラブルを防ぐ意味でも、HWCとFull IISの構造の違いを説明します。

図1 HWC版Webロールの概念図
図1 HWC版Webロールの概念図

 図1は、HWCの概念図です。WaWebHost.exeはWebロールを実行するホストプロセスです。ホストプロセスは、HWCとWebRole1.dll(注2)が組み込まれて動作します。Webアプリケーションのワーカープロセスは、WaWebHost.exe自身となり、ユーザーアセンブリと同一空間で動作します。

 このため、ユーザーアセンブリと、Webアプリケーションの間で静的変数の共有を行っても問題なく、また実行権限の違いといったことを意識しなくて済みました。

注2

 RoleEntryPointクラスが定義されている、ユーザーが作成したアセンブリ。

図2 Full IIS版Webロールの概念図
図2 Full IIS版Webロールの概念図

 図2は、Full IISの概念図です。WaIISHost.exeがWebロールを実行するホストプロセスとなりますが、Webアプリケーションは、IISのワーカープロセスであるw3wp.exeで実行されます。WebRole1.dllは異なる2つのプロセスに読み込まれていることが分かります。RoleEntryPointクラスのOnStart/Run/Stopメソッドが呼ばれるのは、WaIISHost.exe側です。

 このようにWebRole.dllは、お互い異なるプロセスに読み込まれます。OnStartで初期化した静的変数を、Webアプリケーション側から参照するようなことは、HWCでは可能でしたが、Full IISでは不可能となります。

 これに起因したバグとしては、ストレージ構成パブリッシャの設定があります。CloudStorageAccount.SetConfigurationSettingPublisher (...)をOnStartメソッドで構成し、CloudStorageAccount.FromConfigurationSetting(…)をWebアプリケーション側で実行するようなコードは、例外が発生し正しく実行できません。回避策として、CloudStorageAccount.SetConfigurationSettingPublisherをグローバルアプリケーションクラスのApplication_Startメソッドに移動する方法があります。

 他にもFull IISに起因して、いくつかの既知の問題が発生しています。これらは、「Known Issues in Windows Azure」にまとめられています。

HWCを利用したWorkerロール

 Workerロールで、Hosted Web Coreを利用したサンプルが、MSDN Archiveで公開されています。興味がある方は、「Windows Azure Hosted Web Core Worker Role」を参照してください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト statemachine(statemachine)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Windows Azure新機能チュートリアル

もっと読む

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5