SHOEISHA iD

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

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

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)

Windows Azure上で帳票コンポーネント「ActiveReports for .NET 6.0J」を動作させてみた

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

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」という実行時エラーが発生してしまいました。

図16 開発環境で発生した実行時エラー
図16 開発環境で発生した実行時エラー

Windows Azure環境の問題点切り分けと対処方法

ActiveReportsのDLLをWindows Azureに設置する

 最初に、問題点をクリアにするために、“開発環境にActiveReportsがあってWindows Azure環境にはActiveReportsがない”という状態を解消し、開発環境とWindows Azure環境を同一環境にしたいと思います。

 GAC(Global Assembly Cache)にあるDLLをコピーするためには、通常と同じように、参照設定にあるActiveReportsのDLLファイルの[ローカルコピー]プロパティを「True」に設定すれば、ビルドしたアセンブリと同じ実行時フォルダにコピーされるはずです。

図17 参照設定したDLLをローカルコピーする
図17 参照設定したDLLをローカルコピーする

 この設定により、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がブラウザに表示されました。

図18 Windows Azure上でActiveReportsからPDF出力
図18 Windows Azure上でActiveReportsから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を使うならば、“現時点では”開発環境でのテスト実行はあきらめないといけないようです。

次のページ
Azure環境と開発環境で動くActiveReportsアプリ

修正履歴

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

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5477 2010/10/04 17:42

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング