COM インターフェイスを公開する Windows サービス (Visual Studio ATL ウィザードに基づく exe) を作成しました。インプロセス サーバーまたは Windows サービスとして実行しても問題ありません。IIS アクセスの外部でいくつかのプロセスを使用できるようにする必要があるため、Windows サービスが必要です。
私は自分のサービスを呼び出す Web ページ (aspx/C#) をいくつか作成しており、Visual Studio .NET 開発サーバー内ですべてが正常にテストされています。現在、さらにテストするために、Web ページを IIS 7 (Windows 7 で実行) にプッシュしようとしています。しかし、ページが IIS で実行されている場合、COM インターフェイスへの呼び出しはすべてエラーで失敗します。
「次のエラーのため、コンポーネントの COM クラス ファクトリの取得に失敗しました: 80070005 アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))。」
サービスが次のとおりであることを確認しました。
- HKCR\Clsid\ の下で Windows に登録しました (regsvr32.exe は dll でのみ動作するため、実行中の「myservice.exe /RegServer」を登録しました)。
- myservice.exe には、IIS_IUSRS ユーザーの読み取りおよび実行権限があります。
- 64 ビット exe です (したがって、デフォルトの IIS アプリケーション プール スペースにロードする必要があります)。
- .NET Development Server デバッガーでうまく機能します (ただし、IIS では機能しません)。
これがうまくいかない理由はありますか?exe と dll に含まれる COM インターフェイスと何か関係がありますか?
IIS が Windows サービスで公開されている COM インターフェイスを呼び出す可能性はありますか?