クラウド上で帳票ツールを動かしてみる
帳票作成コンポーネント「ActiveReports」は、2010年6月30日に提供されたActiveReports for .NET 6.0J SP2で、Visual Studio 2010に対応しました。このVisual Studio 2010対応版を使って何か新しいことができないかと考えた時に、マイクロソフトが提供するクラウド環境「Windows Azure」上で、ActiveReportsを動かしてみようと思いつきました。
Windows AzureではASP.NET Webアプリケーションが動作しますし、ActiveReportsもASP.NET Webアプリケーション上で動かしてPDFを生成できるので、この2つを組み合わせれば、Windows Azureの鬼門の1つである印刷系機能への解決策を見つけることができるのでは、という発想です。
今回は、ActiveReportsをWindows Azure上で動作させる際に、私が検証した手順をひとつひとつ紐解きながら、実装方法を解説していきます。
今回の記事は、グレープシティの保証対象外の使い方をしています。また、筆者としても実際の業務アプリケーション構築案件としては未使用のため、業務アプリケーションとしての使用に耐えうるかは未知数です。Windows AzureのアーキテクチャーとActiveReportsの特性を踏まえて「動くかも!」と試してみた結果、予想以上にきちんと動いたために記事化に至ったというのが経緯である事を、あらかじめご了承ください。
公開当初に紹介していた実装方法では、ActiveReportsをワーカーロール側で動作させるには、不十分だということが判明したため、一部文章とサンプルファイルを更新しました。
Windows Azureとは?
Windows Azureの詳しい解説は、ActiveReportsの使い方とは別の話になってしまうので割愛しますが、ActiveReportsをWindows Azure上で動作させるために必要な概念について、簡単に説明しておきます。
Windows Azure Platformは、AppFablic、Compute Service、Storage Service、SQL Azureなどから構成されています。今回は、この中のCompute Serviceを使ってActiveReportsを動作させます。
Windows Azure Compute Serviceは、IISが使える「Webロール」とIISが搭載されていない「ワーカーロール」があり、ASP.NET WebアプリケーションであればWebロールだけでも作成できます。しかし、ビジネスロジックなどはワーカーロールに実装して、それをWebロールから呼び出して使う方がよいため、今回のサンプルでは、次のようなデータの流れで実装していきます。理由は後述します。
- ブラウザからWebロール上のASP.NET Webアプリケーションに接続
- Webロールからワーカーロールを呼び出す
- ワーカーロールでActiveReportsを動作させて、PDFのバイナリデータを作成
- 作成されたPDFバイナリデータをWebRoleからブラウザに応答
- ブラウザ側のAdobe Readerプラグインで表示
Windows Azure環境の認証レベルについて
ActiveReportsは、Full認証レベル環境での動作を前提としています。
今回、Windows Azure環境で動作させるにあたり、Windows Azureの認証レベルについて調べてみると、『MSDN:Windows Azure SDK Trust Policy Reference』内に、「Windows Azure trust」として詳しく定義されていました。これによると、コードアクセスセキュリティ(CAS)のレベルで、ASP.NET medium trust相当(部分的には相違)になっていることが分かります。
ActiveReportsのヘルプには、「Medium信頼レベル環境でPDFエクスポートを使用する場合、セキュリティの制限によりシステムフォントフォルダにアクセスできない」ため、指定したフォントや位置が正しく印字されない可能性があると記載されています。解決策として、「PDFフォントファクトリ」を使う方法が記載されているので、この方法で回避できるかどうかも確認していきたいと思います。
Windows Azure側の機能として、「ServiceConfiguration.cscfg」ファイルのロール定義にenableNativeCodeExecution="true"
を追記すればFull認証にできるようなので、こちらの方法でも認証レベルの問題は回避できるかもしれません。