ActiveReportsを動作させた実行例
Windows Azureでの実行
ビルドしてコンパイルエラーがなかったら、Windows Azureに発行して動作を確認してみましょう。
結果は、[PDF出力]ボタンをクリックするとCZ1009Reports.aspxページが呼び出されるところまではいいのですが、その後は残念ながら“ActiveReportsのDLLがWindows Azure上に存在しない”というエラーになってしまいます。
開発環境での実行
Windows AzureアプリケーションをVisual Studio 2010上で動かすと、Development FabricとDevelopment Storageが起動され、その環境を使って動作します。これは、ASP.NET WebアプリケーションをVisual Studio 2010上で動かしたときのASP.NET開発サーバーに相当するものです。
今回のサンプルを開発環境で動作させると、ActiveReportsが開発環境に入っているので、当然、Windows Azureで動作させたときのエラーは発生しません。しかし、そのかわりにリスト5の「_pdf.Export(_rpt.Document, memStream)」
行で「Failed To read TTF file, or no CMAP table found
」という実行時エラーが発生してしまいました。
Windows Azure環境の問題点切り分けと対処方法
ActiveReportsのDLLをWindows Azureに設置する
最初に、問題点をクリアにするために、“開発環境にActiveReportsがあってWindows Azure環境にはActiveReportsがない”という状態を解消し、開発環境とWindows Azure環境を同一環境にしたいと思います。
GAC(Global Assembly Cache)にあるDLLをコピーするためには、通常と同じように、参照設定にあるActiveReportsのDLLファイルの[ローカルコピー]プロパティを「True」に設定すれば、ビルドしたアセンブリと同じ実行時フォルダにコピーされるはずです。
この設定により、ActiveReportsのDLLファイルがWindows Azureの配布対象になるので、発行を行えば他のアセンブリと一緒にWindows Azureにコピーされ、環境を一緒にした訳ですから、Windows Azureでも“ActiveReportsのDLLがない”というエラーではなく、「Failed To read TTF file, or no CMAP table found
」という実行時エラーになるはずです。
そこで、実際に発行してみてWindows Azureでの動作を確認してみます。
Windows Azure上でActiveReportsからPDF出力
結果は、正常に動作し、PDFがブラウザに表示されました。
しかも、単に表示されただけではなく、先ほどASP.NET WebアプリケーションをASP.NET medium trustで動作させたときに確認したような、印字ずれも生じていないPDFになっています。
つまり、Windows Azureのワーカーロール(別途確認していますがWebロールも同様)の認証レベルは、ActiveReportsの動作環境的には、medium trustとは異なると言えると思います。
開発環境の問題点切り分けと対処方法
Windows Azureの実行環境では発生しない「Failed To read TTF file, or no CMAP table found
」のエラーですが、開発環境であるDevelopment Fabric上では発生してしまいます。やはり、実行環境と開発環境では多少の違いがあるのだと想定できます。
そこで、ASP.NET WebアプリケーションでActiveReportsがmedium trustでの制限を回避する方法として先ほど紹介した、PDFフォントファクトリ機能を使ってみたいと思います。
ワーカーロールでPDFフォントファクトリ機能を使う
ワーカーロール側でActiveReportsを使っていたので、「Fonts」フォルダを作成してフォントファイルをコピーし、ワーカーロールのApp.ConfigにPDFフォントファクトリの設定をしました。
App.ConfigにSystem.Web要素がないため、trust要素をどうやって記述しようかと悩みましたが、開発環境であるDevelopment FabricがASP.NET medium trustで動作していると推測できるため、trust要素を書かなくても認証レベルはmedium trustであるはずだと考えました。
さっそく動作させてみたのですが、「VirtualPath="~/Fonts"
」の指定が間違えているとのエラーになってしまいます。つまり、PDFフォントファクトリの設定は、ワーカーロールでは難しいということです。
Windows Azure環境では動作するので悔しいところですが、ワーカーロール側でActiveReportsを使うならば、“現時点では”開発環境でのテスト実行はあきらめないといけないようです。