CodeZine(コードジン)

特集ページ一覧

インストールマニアックス ~ グレープシティコンポーネント meets Windows Azure

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

 Windows Azureでは、SDK 1.3から従来のASP.NETアプリケ―ションを動かしやすくなっています。そこで今回は、グレープシティが提供するASP.NET向けのコンポーネントを使ったアプリケーションを、Windows Azureで動作させるためのコード変更なしにWindows Azureで動作させ、その挙動をチェックしてみたいと思います。

ASP.NETをコード変更なしにWindows Azureで動かしてみる

 グレープシティが販売しているコンポーネントには、ASP.NET向けの製品が多数あります。

ASP.NET 4で使えるコンポーネント一覧
  • ComponentOne Studio for ASP.NET 2010J
    • GridView for ASP.NET
    • TrueChart for ASP.NET
    • Reports for ASP.NET
    • Calendar for ASP.NET
    • Schedule for ASP.NET
    • Accordion for ASP.NET
    • Menu for ASP.NET
    • NavPanel for ASP.NET
    • ToolBar for ASP.NET
    • ToolTip for ASP.NET
    • TreeView for ASP.NET
    • Expander for ASP.NET
    • HeaderContent for ASP.NET
    • MultiPage for ASP.NET
    • Splitter for ASP.NET
    • TabControl for ASP.NET
    • TabStrip for ASP.NET
    • Window for ASP.NET
    • ComboBox for ASP.NET
    • Editor for ASP.NET
    • Input for ASP.NET
    • Slider for ASP.NET
    • PDF for .NET
    • XLS for .NET
    • ZIP for .NET
  • MultiRow for ASP.NET 1,0J
  • SPREAD for ASP.NET 5.0J
  • ActiveReports for .NET 6.0J
  • InputMan for ASP.NET 3.0J
  •  これら.NET Framework 4上のASP.NETで動作するコンポーネントは、Windows Azureで使えるのでしょうか。

     Windows AzureのSDK 1.2までは、WebRoleがHosted Web Core上で動作していましたが、SDK 1.3からIIS(w3wp.exe)上でWebRoleを動作させるモード(フルIISモード)がデフォルトになるなど、従来のASP.NETアプリケ―ションを動かしやすくなっています。そこで今回は、ASP.NET向けのコンポーネントについて、Windows Azureで動作させるためのコード変更なしにWindows Azureで動作させ、その挙動をチェックしてみたいと思います。

     なお、基本的に、該当のコンポーネントをASP.NET Webフォームに配置しただけの状態で、コード変更を行わずにWindows Azure上へ配布して動作確認を行いますが、参照設定しているコンポーネントのDLLについては、Windows Azure上へコピーするために参照設定の[ローカルコピー]プロパティを「常にコピーする」に変更しています。

    ※注1

     今回の記事は、グレープシティの保証対象外の使い方をしています。また、筆者としても実際の業務アプリケーション構築案件としては未使用のため、業務アプリケーションとしての使用に耐えうるかは未知数です。Windows Azureのアーキテクチャーとグレープシティのコンポーネントの特性を踏まえて「動くかも!」と試してみた結果になりますので、あらかじめご了承ください。

    Windows Azureアプリケ―ションの基本的な作り方

     Windows Azure SDKを導入したVisual Studio 2010には、テンプレートとして「Cloud」が追加され、Windows Azure Projectが新規作成できるようになっています。

    図1 Windows Azure Projectの新規作成
    図1 Windows Azure Projectの新規作成

     プロジェクトを作成すると、Windows Azure上に設置するロールを選択するダイアログが表示されるので、「ASP.NET Web Role」を選択します。

    図2 「ASP.NET Web Role」を選択
    図2 「ASP.NET Web Role」を選択

     Windows Azure Projectのテンプレートで新規作成を行うと、2つのプロジェクトが含まれたソリューションが生成されます。試しに実行してみると、「Compute Emulator」と「Storage Emulator」が起動し、その上でWindows Azureアプリケ―ションが動作します(実行には、「SQL Server Express Edition」などローカル実行されているSQL Serverが必要)。

    図3 Windows Azureアプリケ―ションの開発実行環境
    図3 Windows Azureアプリケ―ションの開発実行環境

Schedule for ASP.NETのAzure動作検証

 ComponentOne Studio for ASP.NETに含まれている多くのASP.NET用コンポーネントの中から、まずは、Schedule for ASP.NETを試してみたいと思います。このコンポーネントは、Outlookの予定表のような画面を、コントロールを貼りつけるだけで実現できるものです。

Schedule for ASP.NETをWindows Azure開発環境で動作させてみる

 まず、WebRole側のプロジェクトにaspxファイルを新規追加し、ツールボックスからSchedule for ASP.NETをドラッグ&ドロップします。すると、次のようなデザインが表示されます。

図4 Schedule for ASP.NET
図4 Schedule for ASP.NET

 Windows Azureの実環境には、もちろんSchedule for ASP.NETはインストールされていないので、コンポーネントのDLLを一緒に配布しなければなりません。

 そこで、「C1.Web.UI.3.dll」と「C1.Web.UI.Control.3.dll」を参照設定して、プロパティウィンドウの「ローカルコピー」欄をTrueにします(VBの場合、参照設定を指定してプロパティウィンドウに表示するためには、ソリューションエクスプローラで「すべてのファイルを表示」をOnにする必要があります)。

図5 必要なコンポーネントをローカルコピー
図5 必要なコンポーネントをローカルコピー

 プログラムコードとしては何も手を加えていない状態ですが、このまま実行してWindows Azure開発環境のEmulatorで動作するかを確認してみると、問題なく動作する事が確認できます。

図6 Schedule for ASP.NETのWindows Azure開発環境での実行結果
図6 Schedule for ASP.NETのWindows Azure開発環境での実行結果

Schedule for ASP.NETをWindows Azureにデプロイして動作させてみる

 ローカル開発環境での実行が確認できたので、ソリューションにあるWindwos Azureプロジェクトを右クリックして[発行]メニューを選択します。発行が完了したら、Windows Azureにアクセスして動作を確認します。

図7 Schedule for ASP.NETのWindows Azure実環境での実行結果
図7 Schedule for ASP.NETのWindows Azure実環境での実行結果

 アイコンなども含めて正常に動作していることが確認できました。

SPREAD for ASP.NET 5.0JのAzure動作検証

 次は、SPREAD for ASP.NETを試してみます。表計算コンポーネントの定番ともいえるコンポーネントで、Excelとの親和性も高いのが特徴です。

SPREAD for ASP.NETをWindows Azure開発環境で動作させてみる

 まず、先ほどの手順と同じように、WebRole側のプロジェクトにaspxファイルを新規追加してツールボックスからSPREAD for ASP.NETをドラッグ&ドロップし、デザイナで次のような画面デザインを定義します。

図8 SPREAD for ASP.NET
図8 SPREAD for ASP.NET

 Windows Azureの実環境にはSPREAD for ASP.NETはインストールされていないので、「fp_client」フォルダをプロジェクトに追加すると共に、次のコンポーネントを参照設定してプロパティウィンドウの「ローカルコピー」欄をTrueにし、DLLを一緒に配布します(VBの場合、参照設定を指定してプロパティウィンドウに表示するためにはソリューションエクスプローラで「すべてのファイルを表示」をOnにする必要があります)。

  • FarPoint.CalcEngine.dll
  • FarPoint.Excel.dll
  • FarPoint.PDF.dll
  • FarPoint.Web.Chart.dll
  • FarPoint.Web.Spread.Extender.dll
  • FarPoint.Web.SpreadJ.dll

 SPREADは、一覧表示系のコンポーネントなので、データセットと連結して複数データを表示してこそ真価を発揮します。実行している環境の環境変数を取得してデータセットに格納するコードを用意し、そのデータセットを表示するためのコードを記述します。

リスト1 SPREADにデータセットの内容を表示する例
Public Class CZ1102Spread
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object,
                            ByVal e As System.EventArgs) _
                        Handles Me.Load
        If Not Me.IsPostBack Then
            Call GetRecords()
        End If
    End Sub

    Private Function GetRecords() As Boolean
        Dim ds As DataSet

        Using _proc As New CZ1102DataClass
            ds = _proc.GetRecords
        End Using
        Me.CZ1102_FpSpread.DataSource = ds
        Me.CZ1102_FpSpread.DataBind()
        Return True
    End Function
End Class

 準備ができたので、Windows Azure開発環境のEmulatorで動作するかを確認してみます。問題なく動作する事が確認できました。

図9 SPREAD for ASP.NETのWindwos Azure開発環境での実行結果
図9 SPREAD for ASP.NETのWindwos Azure開発環境での実行結果

SPREAD for ASP.NETをWindows Azureにデプロイして動作させてみる

 ローカル開発環境での実行が確認できたので、ソリューションにあるWindwos Azureプロジェクトを右クリックして[発行]メニューを選択します。発行が完了したら、Windows Azureにアクセスして動作を確認します。

図10 SPREAD for ASP.NETのWindwos Azure実環境での実行
図10 SPREAD for ASP.NETのWindwos Azure実環境での実行

 アイコンなども含めて正常に動作していることが確認できました。

ActiveReports for .NET 6.0JのAzure動作検証

 ActiveReportsは、日本独自の帳票文化における高い要求を叶えることができる筆者愛用のコンポーネントです。Webアプリケ―ションと言えども、PDFなどで印刷可能な品質の出力機能が求められるときには、必須のコンポーネントです。

 ActiveReportsは、以前もWindows Azure上で動作させる方法を紹介しましたが、フルIISモードでどれだけ手間がかからないようになったかを確認したいと思います。

ActiveReportsをWindows Azure開発環境で動作させてみる

 フルIISモードになったとしても、Windows Azureの実環境にはActiveReportsはインストールされていないので、WebRole側のプロジェクトで参照設定の追加と各DLLの[ローカルコピー]プロパティをTrueにする作業を行います。

図11 参照設定
図11 参照設定

 次に、aspxファイルを新規追加して、ActiveReportsを使ってPDFを返却するページを作成します。

リスト2 ActiveReportsを使ってPDFを返却する例
Imports DataDynamics.ActiveReports
Imports DataDynamics.ActiveReports.Export.Pdf

Public Class CZ1102ActiveReports
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object,
                            ByVal e As System.EventArgs) _
                        Handles Me.Load
        If Not Me.IsPostBack Then
            Call GetRecords(False)
        End If
    End Sub

    Private Function GetRecords(ByVal isEmbedFonts As Boolean) As Boolean
        Using webClient As New System.Net.WebClient
            Dim userID As String = My.User.Name
            Dim pdfStream() As Byte
            Dim pdf() As Byte = System.Text.Encoding.UTF8.GetBytes("%PDF")

            pdfStream = GetPdfDatas(isEmbedFonts)
            If pdfStream(0) = pdf(0) AndAlso pdfStream(1) = pdf(1) AndAlso pdfStream(2) = pdf(2) AndAlso pdfStream(3) = pdf(3) Then
                ' ブラウザに対してPDFドキュメントの適切なビューワを使用するように指定します。
                Response.ContentType = "application/pdf"
                Response.AddHeader("content-disposition", "inline; filename=AzureActiveReports.PDF")
            End If
            ' 出力ストリームにPDFのストリームを出力します。
            Response.BinaryWrite(pdfStream)
            ' バッファリングされているすべての内容をクライアントへ送信します。
            Response.End()
        End Using
        Return True
    End Function

    ''' <summary>
    ''' PDFデータを取得する
    ''' </summary>
    Private Function GetPdfDatas(ByVal isEmbedFonts As Boolean) As Byte()
        Dim memStream As System.IO.MemoryStream
        Dim ds As DataSet

        Using _proc As New CZ1102DataClass
            ds = _proc.GetRecords
        End Using
        Using _rpt As New CZ1102Reports
            _rpt.Document.Printer.PrinterName = ""
            _rpt.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4
            _rpt.PageSettings.Orientation = Document.PageOrientation.Portrait
            _rpt.PageSettings.Margins.Top = ActiveReport.CmToInch(0.5F)
            _rpt.PageSettings.Margins.Bottom = ActiveReport.CmToInch(0.5F)
            'データを割り当てる
            _rpt.DataSource = ds.Tables("Enviroment")
            ' レポートを作成します。
            _rpt.Run(False)
            ' PDFエクスポートオブジェクトを生成します。
            Using _pdf = New PdfExport
                ' PDFの出力用のメモリストリームを作成します。
                memStream = New System.IO.MemoryStream
                'フォントを非埋め込みにする
                If Not isEmbedFonts Then
                    _pdf.NeverEmbedFonts = "*"
                End If
                ' メモリストリームにPDFエクスポートを行います。
                _pdf.Security.Use128Bit = True
                _pdf.Security.OwnerPassword = "hatsune"
                _pdf.Security.Permissions = PdfPermissions.AllowPrint
                _pdf.Security.Encrypt = True
                _pdf.Export(_rpt.Document, memStream)
            End Using
        End Using
        Return memStream.ToArray()
    End Function
End Class

 準備ができたのでWindows Azure開発環境のEmulatorで動作するかを確認してみると、該当のaspxにアクセスすればPDFがダウンロードされ、表示されることが確認できます。

ActiveReportsをWindows Azureにデプロイして動作させてみる

 ローカル開発環境での実行が確認できたので、ソリューションにあるWindwos Azureプロジェクトを右クリックして、[発行]メニューを選択します。発行が完了したらWindows Azureにアクセスして、動作を確認します。

図12 ActiveReportsのWindows Azure実環境での実行結果
図12 ActiveReportsのWindows Azure実環境での実行結果

 文字化けなどもなく、非常にスムーズに開発環境・実環境ともに正常動作しました。前回の苦労が嘘のようです。

MultiRow for ASP.NET 1.0JのAzure動作検証

 次に、MultiRow for ASP.NETを試してみます。MultiRow for ASP.NETは、1レコードのデータを複数行表示するコンポーネントです。ASP.NET Webフォームの開発において、通常、RepeaterコントロールとHTMLを駆使して実現していたことを、デザイナーを使って欲しい見た目を素早く実現できるため、デザイン性と生産性を両立できる優れたコンポーネントです。

MultiRow for ASP.NETをWindows Azure開発環境で動作させてみる

 まずは、WebRole側のプロジェクトにaspxファイルを新規追加し、ツールボックスからMultiRow for ASP.NETをドラッグ&ドロップして、デザイナで次のような画面デザインを定義します。

図13 MultiRow for ASP.NET
図13 MultiRow for ASP.NET

 今までと同様、Windows Azureの実環境にはMultiRow for ASP.NETがインストールされていないので、コンポーネントのDLLを一緒に配布します。「GrapeCity.Web.MultiRow.dll」と「GrapeCity.Web.MultiRow.resources.dll」を参照設定して、プロパティウィンドウの「ローカルコピー」欄をTrueにします(VBの場合、参照設定を指定してプロパティウィンドウに表示するためにはソリューションエクスプローラで、「すべてのファイルを表示」をOnにする必要があります)。

図14 必要なコンポーネントをローカルコピー
図14 必要なコンポーネントをローカルコピー

 MultiRowは前述のSPREADと同じように一覧表示系のコンポーネントなので、データセットと連結して複数データを表示してこそ真価を発揮します。実行している環境の環境変数を取得して、データセットに格納するコードを用意し、そのデータセットを表示するためのコードを記述します。

リスト3 MultiRowにデータセットの内容を表示する例
Public Class CZ1102MultiRow
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object,
                            ByVal e As System.EventArgs) _
                        Handles Me.Load
        If Not Me.IsPostBack Then
            Call GetRecords()
        End If
    End Sub

    Private Function GetRecords() As Boolean
        Dim ds As DataSet

        Using _proc As New CZ1102DataClass
            ds = _proc.GetRecords
        End Using
        Me.CZ1102_MultiRow.DataSource = ds
        Me.CZ1102_MultiRow.DataBind()
        Return True
    End Function
End Class

 準備ができたので、Windows Azure開発環境で実行してみます。すると、デバッグが開始できない旨の表示がでて、実行が停止します。

図15 Windows Azure開発環境での実行時のエラー表示
図15 Windows Azure開発環境での実行時のエラー表示

 そこで、「デバッグせずに実行(Ctrl + F5)」で実行したときに表示される詳細なエラーをもとに、次のように「Web.Config」に追記して、エラーを回避します。

図16 「デバッグせずに実行」時のエラー表示
図16 「デバッグせずに実行」時のエラー表示
<system.web>
  <httpHandlers>
    <add path="MRWebResource.axd" verb="GET" type="GrapeCity.Web.MultiRow.MRWebResource" validate="true" />
  </httpHandlers>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
  <machineKey decryption="AES" …(略)… />
</system.web>
<system.webServer>
  <handlers>
    <add name="MRWebResource" preCondition="integratedMode" path="MRWebResource.axd" type="GrapeCity.Web.MultiRow.MRWebResource" verb="GET" />
  </handlers>
  <validation validateIntegratedModeConfiguration="false" />
</system.webServer>

 この追記によって、無事にWindows Azure開発環境で、MultiRowを使ったASP.NET Webフォームを動作させることができました。

MultiRow for ASP.NETをWindows Azureにデプロイして動作させてみる

 Windows Azure開発環境でうまくいったので、さっそくWindows Azure実行環境にデプロイして動作を確認してみます。下の図のように、無事に動作が確認できました。

図17 MultiRow for ASP.NETのWindows Azure実環境での実行結果
図17 MultiRow for ASP.NETのWindows Azure実環境での実行結果

InputMan for ASP.NET 3.0JのAzure動作検証

 InputMan for ASP.NETは、日本の業務シーンで要求されるような入力欄を実現するためのコンポーネントです。SPREAD、ActiveReportsと合わせて「業務アプリをつくるならコレ!」とお勧めできるコンポーネントです。

InputMan for ASP.NETをWindows Azure開発環境で動作させてみる

 WebRole側のプロジェクトにaspxファイルを新規追加してツールボックスからInputMan for ASP.NETをドラッグ&ドロップして、デザイナで次のような画面デザインを定義します。

図18 InputMan for ASP.NET
図18 InputMan for ASP.NET

 InputMan for ASP.NETに必要なDLLは次の通りです。

  • GrapeCity.Web.Input.V30.dll
  • GrapeCity.Web.Input.V30.Resource.dll

 この2つを参照設定としてプロパティウィンドウの「ローカルコピー」欄をTrueにします。これで準備ができたので、開発環境で実行するとデバッグが開始できない旨の表示がでて、実行が停止します。

 MultiRowの場合と同様に、「Web.Config」にsystem.webServerを追記し、次のように記載することで起動時のエラーは回避できます。

<system.web>
   <httpHandlers>
     <add path="IMWebResource.axd" verb="GET" type="GrapeCity.Web.Input.Core.IMWebResource"
       validate="true" />
   </httpHandlers>
   <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
   <machineKey decryption="AES" …(略)… />
 </system.web>
 <system.webServer>
   <handlers>
     <add name="IMWebResource" preCondition="integratedMode" path="IMWebResource.axd" type="GrapeCity.Web.Input.Core.IMWebResource" verb="GET" />
   </handlers>
   <validation validateIntegratedModeConfiguration="false" />
 </system.webServer>

InputMan for ASP.NETをWindows Azureにデプロイして動作させてみる

 InputManもデプロイしてWindows Azure実環境での動作を確認してみます。ソリューションエクスプローラで、Windos Azureプロジェクトを右クリックし、[発行]を選んでWindows Azure実環境へデプロイします。

 デプロイが完了したら「Windows Azure Activety Log」に表示されているURLにアクセスして、正常動作を確認します。

図19 InputManのWindows Azure実環境での実行結果
図19 InputManのWindows Azure実環境での実行結果

まとめ

 Windows AzureがフルIISモードに対応したことで、以前は手間やノウハウが必要だったASP.NET Webフォームからの移行が、かなり楽になりました。その楽さは、ASP.NET Webフォーム用のコンポーネントを使った場合にも享受できることが、今回の検証で見えてきました。

 将来的には、ASP.NET対応のコンポーネントは、WebRole対応と同義に近くなると思います。現状でも、フルIISモードであれば、既存ASP.NET WebフォームのプロジェクトをWindows Azureソリューションに追加し、WebRoleプロジェクトとして登録することで、動作確認できます。このように、比較的少ない手順で、導通テストのようなことができるのも、フルIISモードの利点といえるでしょう。

 今回の検証を通し、Windows Azureアプリケ―ション作成において、市販コンポーネントも含め、ASP.NETと近い感覚で開発できる時期が、すぐ近くまで来ているように感じました。

製品情報

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

著者プロフィール

  • 初音玲(ハツネアキラ)

     国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。  個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。  Microsoft MVP for Windows Development...

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