2010年7月24日土曜日

COMコンポーネントをIISで実行する

サーバサイドでCOMを実行したいことはままあることで、それでは、と普通にローカルで動作しているCOMをIISのプロセス上で動かすとCoCreateInstanceでインスタンスが生成できなかったりする。考えられる理由は下記の通り。

・COMがシングルスレッド上でしか実行できない
・IISのアプリケーションプールが正しくない

一つ目は、いくつかのCOMはシングルスレッド上でしか実行できない。そのためマルチスレッド上でCoCreateInstanceを行ってもインスタンス生成ができない。回避方法はSTAのスレッドを開始して、そのスレッド上でCOMを呼び出せばよい。

Thread.SetApartmentState Method

ただ、STAなので処理はすべて順番に行われる。そのためリクエストが多重になればなるほどパフォーマンス上のボトルネックになるので注意が必要だ。


ついで、IISのアプリケーションプールのIDがNetWorkServiceのままだと動作しない場合がある。その場合は下図を参考にIDをLocalServiceに変更してもらいたい。

COMを実行したいアプリケーションプールの詳細設定を選択する。

プロセスモデルのIDをLocalServiceに変更する。

0 件のコメント:

コメントを投稿