Uncategorized

[IT Pro 道場補足] IIS 7 を使ったモジュール統合

IT Pro 道場 (東京) 補足

デモでは、ここもほとんどお見せすることができませんでしたが、完成形のデモ(最後ビデオを見て頂いたもの)では、実は、イメージもデータベースに登録し、このデータベース上のイメージを表示しています。

こうした処理を作成するためには、1 つの方法として、IIS のハンドラと呼ばれる処理を (開発者が) 作成します。簡単に書いてしまうと、ある拡張子のときに (例えば、.image という拡張子でアクセスした場合に) 内部でどのような処理をおこなってどのように出力するかをコードを使って記述できるものです。
ハンドラを記述したサンプルコードについては、

IIS7 によるカスタムモジュールの作成
http://msdn.microsoft.com/ja-jp/events/dd266858.aspx

の一番下にサンプルコードを示しています。
このサンプルコードでは、イメージにアクセスすると、そのイメージの ファイル を Bitmap オブジェクトとして取得し、
そこに加工をおこなって出力をおこなっています。IT Pro 道場でお見せしているデモでは、この箇所は、WCF サービスを呼び出して、呼び出された WCF サービスの中で、データベース に接続をおこない、イメージのバイナリデータを返すといった処理を作成していました。
実際にこうしたアプリを作る際、ここで、新技術におけるいくつかの便利になったポイントがありますので、以下に記載します。

ポイント1

従来、こうしたカスタムのハンドラを作成して組み込むには、ネイティブのコードなどで処理を作成して、別途 IIS に組み込む必要があったのではないかと思います。
IIS 7 では、マネージコード (C# や VB) でハンドラを作成し、しかもそれを普通に ASP.NET のプロジェクトの中にクラスとして埋め込んでおけば、コンパイルされて bin 下の dll の中に処理が埋め込まれ、これを IIS から参照することができます。(ご存知の通り、IIS では、デフォルトでは、GAC にある dll と、各アプリケーションの bin 下にある dll を見るようになっています。)
また、「ハンドラとしての IIS 上での設定が必要ではないか」と思われるかもしれませんが、上記 URL の Web キャストでおこなっているような手順で IIS 上でハンドラとして設定すると、その内容はそのアプリケーション内の Web.config に記載されます。そして、この Web.config も ASP.NET のプロジェクトの中に入っています。

つまり、何が言いたいかというと、ASP.NET のプロジェクトとして作成、設定してコンパイルしてしまえば、以降は、そのプロジェクトをそのまま動かして配置するだけで、配置先に別途設定などをおこなう必要はないということです。カスタムモジュールやカスタムハンドラの処理では、ASP.NET のプロジェクトの中で完結して作成・配置 (つまりは、管理) することができるようになっているのです。

ポイント2

WCF を経由してイメージなどを渡すと、いったんメモリ上に展開されるため、イメージが大きい場合には大変サーバのメモリを圧迫するように思われるかもしれません。
実は、WCF では、ストリーミングを利用することができます。
データベースから取得したイメージ情報はストリーミングで流し、受け取る ASP.NET のアプリ側では、受け取ったイメージデータを並行でブラウザに返していけば、サーバのリソースの問題も回避しながら処理することができます。

但し、ストリーミングを使った WCF サービスの記述は、処理の方法など、プログラミングが面倒になってくるという点は注意しておきましょう。

Categories: Uncategorized

Tagged as:

10 replies»

  1. こんにちは。 IT Pro 道場「アプリケーションプラットフォーム編」にご参加いただき、ありがとうございました。 と共に、いきなりアプリが動かず、以降のデモのいっさいをお見せすることができなくなってしまい申し訳ございませんでした。

    Like