私の Azure ロール スタートアップ コードでは、DCOM オブジェクトをインスタンス化してインスタンス化できることを確認し、その時点では必要ないのですぐに解放します。
new
これは、対応する C# RCW クラスに実際に対応する別のスレッドThread.Join()
と、そのスレッドに 30 秒のタイムアウトが設定されたメイン スレッドで行います。スレッドがThread.Join()
返された後も実行されている場合、これは DCOM オブジェクトの作成に疑わしいほど長い時間がかかるため、Thread.Abort()
呼び出されてロールが再起動されることを意味します。30 秒で十分です。オブジェクトは軽量で、インスタンス化に時間がかかることはありません。
このコードは、サービスを劇的にスケールアップしようとするまでは問題なく機能していました。コンピューティング コアのクォータを引き上げるようにサポートに依頼し、100 (100) インスタンスにスケーリングしようとしました。
ほとんどのインスタンスは正常に開始されましたが、一部のインスタンスはまさに上記の状況に直面しました。DCOM オブジェクトの作成に時間がかかりすぎたため、コードが例外をスローし、ロールが再開されました。
何度かテストを繰り返しました。数十のインスタンスでスケールアップするように依頼すると、新しく開始されたインスタンスの一部で問題が再現されます。すべてのインスタンスが均一であるため、何がこの動作を引き起こしているのかわかりません。
一部のインスタンスでのみ DCOM オブジェクトが非常に長くかかる理由は何ですか?