サーバサイドでCOMを実行したいことはままあることで、それでは、と普通にローカルで動作しているCOMをIISのプロセス上で動かすとCoCreateInstanceでインスタンスが生成できなかったりする。考えられる理由は下記の通り。
・COMがシングルスレッド上でしか実行できない
・IISのアプリケーションプールが正しくない
一つ目は、いくつかのCOMはシングルスレッド上でしか実行できない。そのためマルチスレッド上でCoCreateInstanceを行ってもインスタンス生成ができない。回避方法はSTAのスレッドを開始して、そのスレッド上でCOMを呼び出せばよい。
Thread.SetApartmentState Method
ただ、STAなので処理はすべて順番に行われる。そのためリクエストが多重になればなるほどパフォーマンス上のボトルネックになるので注意が必要だ。
ついで、IISのアプリケーションプールのIDがNetWorkServiceのままだと動作しない場合がある。その場合は下図を参考にIDをLocalServiceに変更してもらいたい。
COMを実行したいアプリケーションプールの詳細設定を選択する。
プロセスモデルのIDをLocalServiceに変更する。
0 件のコメント:
コメントを投稿