.NETからIE(SHDoc.InternetExplorer)を操作するアプリを保守してのだが、時々下記のようなエラーが出ることがある。
起動されたオブジェクトはクライアントから切断されました。 (HRESULT からの例外: 0x80010108 (RPC_E_DISCONNECTED))
毎回出るわけじゃないし、開発環境だと再現しないから困ってたのだが、何となく原因ぽいものを発見したのでメモ。
原因(かも)
原因はIE表示後に実行されているjavaScriptかも。
推測ばかりだけど、たぶんjavaScript実行中はIEに対してのアクセスが禁止されていて、切り離されたような状態になってるのかな。
ネットワークが混み合ってるとjavaScriptのレスポンスが悪くなってロック時間が長くなり、問題のエラーが出やすくなる。
解決策
IE側をどうにかできればいいのかもしれないけど、立場上そっちはいじれないのでアプリ側で対応。
やったことはInternetExplorerクラスを継承して、使ってるメソッドやプロパティをオーバーライド。継承した処理内ではtry〜catchを定義して複数回値の取得に挑戦する。
というかなり暴力的なコーディング(笑)
しばらく動かして様子を見ることにします。