私は2台のServer 2016マシンを所有しており、x64統合プールでClassic ASPアプリケーションを実行しています。共有構成。
両方のサーバーの設定は同一だと思っていましたが、1台のサーバー次の場合にエラーが発生します:
obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0") を設定します。
エラー番号 = 800401F3
私のアプリケーションのみに!
その行を別の ASP ページに置き、同じサイトで実行すると、正常に完了します (Err.Number=0)
イベント ログ エントリが見つかりません。
私が試したこと:
- バージョンありとなし(.6.0 部分)
- レジストリ権限
- msxml3.dll と msxml6.dll のファイル権限 (System32 と SysWOW64 の両方)
- 同じDLLの登録解除/再登録
どこを調べればよいか、また、この問題をどのように解決すればよいかについてアドバイスをいただければ幸いです。
答え1
同じサイトの別のページでは正常に動作するが、同じアプリケーションの別のページでは動作しない場合は、アプリケーションの設定に問題があるはずです。空の web.config から開始し、壊れたアプリから特定の設定を追加します。
同じアプリの基本ページで正常に実行される場合、問題はそのページにあります。
構成内のどの部分が原因でこれが壊れるのかはわかりませんが、それを試してみるつもりです。
答え2
これはオブジェクトの作成に関する問題ではなく、Server.CreateObject() のバグ (または動作の変更) と、異なる COM DLL の複数のバージョンを処理するコードに問題がありました。
次のように、DLL の複数のバージョンを処理するコードがありました。
obj = Server.CreateObject("Version1.Object")
If Err.Number <> 0 Then
obj = Server.CreateObject("Version2.Object")
End If
最後に、これらのいずれかが成功したと仮定すると、Err.Number = 0
IIS 10.0 (Server 2016) では、Server.CreateObject("Version2.Object") が成功すると、Err.Number に Server.CreateObject("Version2.Object") からの以前の値が残ります。
新しいコード:
obj = Server.CreateObject("Version1.Object")
If Err.Number <> 0 Then
Err.Clear
obj = Server.CreateObject("Version2.Object")
End If