5

Windows Server 2008 R2 Standard の IIS 7 で実行されている従来の ASP アプリケーションがあります。

1 日のある時点で問題なく動作していましたが、突然、コードを変更することなく、COM+ コンポーネントのインスタンス化中に次のエラーがスローされ始めました。

MyObject = Server.CreateObject("MyCustomComponent.MyCustomObject")

サーバー オブジェクト エラー 'ASP 0177: 80004005'

Server.CreateObject に失敗しました

/path/script.asp、xx 行目

80004005

何が問題なのですか?私はインターネット検索を行い、何十もの潜在的な答えを見つけましたが、どれも問題とは何の関係もないようです. 私は正しいオブジェクト名を使用していることを知っています。それはほんの少し前まで機能していました。何も変わっていません!私はこれを理解しようとしてほぼ2時間費やしましたが、空になりました。

4

1 に答える 1

11

エラー 80004005 の一般的なトラブルシューティング

このエラーは、さまざまな原因が考えられるため、トラブルシューティングが難しい場合があります。インターネットで簡単に検索すると、多数の提案が表示されます。

ここで考えられる問題を合理的なリストに絞り込むための重要な側面は、コードを変更せずに、コードが機能していて、突然失敗し始めたことです。IIS または COM の構成に大きな変更がないと仮定すると、たとえば、コンポーネントに間違ったクラス名を使用したり、コンポーネントが正しく登録されていない可能性が除外されます。代わりに、IIS と COM 自体の構成に注意を向ける必要があります。これにより、設定の変更が行われずに一貫性のない動作が可能になる可能性があります。

  • サイトにアクセスするユーザー、IIS を実行するように設定されているユーザー、または COM コンポーネントが偽装するように設定されているユーザー アカウントに対するユーザー アカウントのアクセス許可の変更を確認します。
  • IIS でサイトまたはアプリケーションに設定されているアプリケーション プールを確認します。
  • ASP コード内のアクセス許可/認証/偽装コードを確認します。
  • COM コンポーネント自体の設定を見直してください。

実際の問題

最終的に、この問題は、それぞれ別の IIS アプリケーション プールにある複数の IIS サイトとアプリケーションが同じ COM コンポーネントを使用していたという事実に要約されました。これ自体は問題ではありませんが、COM コンポーネントが一度に最大 1 つのアプリケーション プールにアクセスできるように設定されている場合を除きます。

ページがしばらく機能していた理由は、最初に COM コンポーネントを取得できたからです。同じ COM コンポーネントを使用する他のサイト/ページ/アプリケーション プールは、誰かがアクセスした場合に失敗します。COM コンポーネントは 3 分後に解放されるように設定されていたため、他のページにアクセスすると、そのページに「つかみ」、テスト中の新しいページで使用されないようにする機会が与えられました。

修正

Windows Server 2008 で COM コンポーネントのアプリケーション プールの制限を増やすための詳細な手順を次に示します。

  1. [コントロール パネル] > [管理ツール] > [コンポーネント サービス] に移動します。

  2. ツリーで、[コンポーネント サービス] > [マイ コンピューター] > [COM+ アプリケーション] に移動し、カスタム コンポーネントを見つけます。

  3. コンポーネントを右クリックして、プロパティを取得します。

  4. [プーリングとリサイクル] プロパティ ページ タブで、[プール サイズ] を 1 より大きい数値に設定して、IIS などから同時にコンポーネントにアクセスする可能性のあるアプリケーション プールの数と一致させます。

    COM+ プーリングとリサイクル

  5. Web ページをもう一度試してみると、ほら、また動きます!

于 2013-03-19T17:54:08.760 に答える