SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

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

複数サイトと仮想アプリケーションの構成

 ここでは、複数サイト、仮想アプリケーション、仮想ディレクトリの構築方法を説明します。サンプルファイルのMultiSitesフォルダにソリューションが格納されています。

 ソリューションの構成は、図3の通りです。ASP.NET Webロールプロジェクトが1つと、ASP.NET Webアプリケーションプロジェクトが2つ存在します。本サンプルでは、2つのWebアプリケーションプロジェクトを、それぞれ複数サイト、仮想アプリケーションとして構成します。また、Webロールプロジェクトに存在するImageフォルダを仮想ディレクトリとして構成し共用してみます。

図3 ソリューションの構成
図3 ソリューションの構成

 ソリューションエクスプローラーからサービス定義ファイル(ServiceDefinition.csdef)を選択して開きます。サービス定義ファイルに、太字部分がサンプルでの追加部分です(リスト3)。

リスト3 Sites要素(ServiceDefinitison.csdef)
  <WebRole name="WebRole1" vmsize="ExtraSmall">
    <Sites>
      <Site name="Web">                                                                          *1
        <VirtualApplication name="VirtualApplication" physicalDirectory="../WebApplication2"> *2
          <VirtualDirectory name="Image" physicalDirectory="../WebRole1/Image" />              *3
        </VirtualApplication>
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
        <Site name="WebApplication1" physicalDirectory="../WebApplication1">                   *4
        <VirtualDirectory name="Image" physicalDirectory="../WebRole1/Image" />                *5
        <Bindings>
         <Binding name="Endpoint1" endpointName="Endpoint2" />                                 *6
        </Bindings>
      </Site>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
      <InputEndpoint name="Endpoint2" protocol="http" port="8080" />                          *7
    </Endpoints>
    …
</WebRole>

 *1はデフォルトのWebサイトです。*2は、デフォルトのWebサイト配下に、WebApplication2プロジェクトを仮想アプリケーションとして構成しています。physicalDirectory属性には、WebApplication2のプロジェクトフォルダを指定しています。

 *3と*5は、仮想フォルダを指定しています。physicalDirectoryには、WebRole1プロジェクトのImageフォルダを指定しており、このフォルダが共用されます。

 *4は、WebApplication1をもう1つのWebサイトとして構成しています。physicalDirectoryには、WebApplication1プロジェクトのプロジェクトパスを指定しています。複数のサイトを構成する場合、*6のBinding要素が必須です。対応する*7のInputEndpoint要素で、プロトコルと使用するポート番号を指定します。

 本サンプルでは、サイトの場所にプロジェクトフォルダを直接指定しています。このように指定すると、不要なソースファイル等もパッケージ化して配置されてしまうので注意してください。実際には、いったんファイルシステムになどに発行を行ない、不要なファイルが含まれないフォルダを指定します。

 各サイトに違いが分かるように、Default.aspxには、サイト名、仮想パス、要求されたホスト名を表示します(リスト4)。WebRole1、WebApplication1、WebApplicaton2はすべて同じ内容です。

リスト4 Webフォーム(Default.aspx.cs)
<%@ Import Namespace="System.Web.Hosting" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <p style="font-size: 150%; font-weight: bold">
        サイト名 = <asp:Label ID="Label1" runat="server" Text="<%# HostingEnvironment.SiteName %>" /><br />
        仮想パス = <asp:Label ID="Label2" runat="server" Text="<%# HostingEnvironment.ApplicationVirtualPath %>" /><br />
        要求されたホスト名 = <asp:Label ID="Label3" runat="server" Text="<%# this.Request.Url.Host %>" />
    </p>
    <p>
        <asp:Image ID="Image1" runat="server" ImageUrl="~/Image/WindowsAzure.png" Width="300" />
    </p>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e){
            this.DataBind();
        }
    </script>
</asp:Content>

 Windows Azureに配置して実行結果を確認してみましょう。各URLにアクセスすると、Sites要素で定義した構成でアクセスできることが確認でき、イメージも共用できていることが確認できます(図4)。

図4 複数サイト、仮想アプリケーションの実行結果
図4 複数サイト、仮想アプリケーションの実行結果

 リモートデスクトップ接続し、IISマネージャ確認するとIISのサイトが構成されていることが確認できます(図5)。

図5 IISマネージャにおけるIIS構成
図5 IISマネージャにおけるIIS構成

次のページ
まとめ

この記事は参考になりましたか?

Windows Azure新機能チュートリアル連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト statemachine(statemachine)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5958 2011/06/09 14:00

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー