CodeZine(コードジン)

特集ページ一覧

管理者権限を手に入れろ! Windows Azure権限昇格編

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

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

WebRole.csの修正

 スタートアップタスクの構成に引き続き、ランタイムの構成を行います。ランタイムの権限昇格によってWebRoleクラスは管理者権限で実行されます。

 Webロールにおいて、Webアプリケーションが実行されるアプリケーションプールは64bitで構成されています。このままでは、32bitのCOMコンポーネントを呼び出すことはできないため、アプリケーションプールを32bitで再構成します。この処理は、WebRoleのOnStartメソッドで行います。

 Webロールのコンテキストメニューからから[参照の追加]を選択し、Microsoft.Web.Administrationへの参照を追加します。Microsoft.Web.Administration.dllは、C:\Windows\System32\inetsrvに存在します。

 WebRole.csファイルを開きコードを入力します(リスト7)。ServerManagerクラスはIISの構成を管理するクラスです。このServerManagerクラスからアプリケーションプールを取得し、32bitアプリケーションが実行できるようにIISの構成変更を行います。

[リスト7]IISの構成変更例(WebRole.cs)
using System;
using System.Linq;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Diagnostics;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.Win32;
using Microsoft.Web.Administration;

namespace WebRole1
{
    public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            using (ServerManager serverManager = new ServerManager())
            {
                // Webロールのサイト名を取得
                string siteName = RoleEnvironment.CurrentRoleInstance.Id + "_Web";
                // サイト名をキーに、Appilcationを取得
                var application = serverManager.Sites[siteName].Applications.First();
                // アプリケーションプール名を取得
                var applicationPoolName = application.ApplicationPoolName;
                // アプリケーションプールを取得
                var applicationPool = serverManager.ApplicationPools[applicationPoolName];
                // アプリケーションプールを32bit化
                applicationPool.Enable32BitAppOnWin64 = true;
                // 変更をコミット
                serverManager.CommitChanges();
            }
            return base.OnStart();
        }
    }
}

COMコンポーネントの登録と参照設定

 COMコンポーネントの登録と参照設定を行います。

 サンプルファイル(Sample.zip)をダウンロードし解凍します。解凍後に作成されるCOMフォルダから、AzureCOMSample.dllをWebロールプロジェクト内にコピーしプロジェクトに含めます。AzureCOMSample.dllもスタートアップスクリプトファイルと同じく、プロパティを常にコピーするに設定します。

 管理者権限でコマンドプロンプトを開きregsvr32コマンドを実行します(リスト8)。

[リスト8]COMコンポーネントの登録
regsvr32 AzureCOMSample.dll

 登録に成功すると成功した旨のメッセージボックスが表示されます(図4)。

図4:COMコンポーネントの登録
図4:COMコンポーネントの登録

 続いて、Webロールのコンテキストメニューから[参照の追加]を選択し、登録したCOMコンポーネントへの参照を追加します(図5)。

図5:COMコンポーネントへの参照設定
図5:COMコンポーネントへの参照設定

 これで、COMコンポーネントの登録は完了です。

Webフォームの修正

 COMコンポーネントを呼び出し、結果を表示する部分を作成します。

 Default.aspxを開き、リスト9のコードを入力します。

[リスト9]Webフォーム(Default.aspx.cs)
<%@ Page Title="ホーム ページ" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
       権限昇格のサンプル(32bit COMの登録と呼び出し)
    </h2>
    <p>
    実行モード:
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </p>
    <p>
        <asp:TextBox ID="TextBox1" runat="server" Width="260px"></asp:TextBox>&nbsp;
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        <br />
        <br />
        <asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Size="Large" />
    </p>
</asp:Content>

 デザイナでの表示は、図6の通りです。

図6:デザイナでの表示
図6:デザイナでの表示

 引き続き、コードビハインドクラスの修正を行います(リスト10)。

 Label1には、現在のプロセスが32bitか64bitのいずれかで動作しているか表示します。IISのアプリケーションプールを32bitで構成しているため、常に32bitと表示されます。

 ボタンのイベントハンドラメソッドには、COMクラスの生成とGetMessageメソッドの呼び出しを追加し、Label2に表示します。

[リスト10]コードビハインドクラス(Default.aspx.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebRole1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 現在プロセスが32bit/64bit か判定。今回のサンプルでは、常に32bitと表示される。
            this.Label1.Text = System.Environment.Is64BitProcess ? "64bit" : "32bit";
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            // COMのクラス生成し呼び出す、結果を表示する。
            var com = new AzureCOMSampleLib.AzureCOM();
            this.Label2.Text = com.GetMessage(this.TextBox1.Text);
        }
    }
}

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

バックナンバー

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

もっと読む

著者プロフィール

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

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

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

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

あなたにオススメ

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