0

I've got two Server 2016 machines running a Classic ASP application in an x64 Integrated pool and Shared Configuration.

I thought that both servers were setup identically, however one server gets an error on:

Set obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0")

Err.Number = 800401F3

ONLY in my application!

If I put that line in a separate ASP page, running in the same site, it completes normally (Err.Number=0)

I've found no Event Log entries.

What I've tried:

  • With and without version (.6.0 part)
  • Registry permissions
  • File permissions on msxml3.dll & msxml6.dll (both System32 and SysWOW64)
  • Un/reregister the same DLLs

I'm hoping for suggestions on where to look/how to trouble shoot this.

Scott H
  • 11
  • 5

2 Answers2

0

If it runs fine on another page in the same site but not on another page in the same application, it must have to do with the application settings. Start with a empty web.config and add specific settings from your broken app.

If it runs fine in a basic page in the same app, your page is the problem.

Not sure what inside the configuration would cause this to break, but that's what I would try.

Peter Hahndorf
  • 14,058
  • 3
  • 41
  • 58
  • Perhaps my wording was poor. There's only a site, not an "application" in the IIS sense. The pages that work and don't are literally side-by-side in the same folder. The site root is a UNC accessed from both servers, so the same web.config in both cases. The servers are using Shared Configuration, which seems to be working fine as changes on one in IIS are readily seen changed in the other... – Scott H Mar 16 '18 at 06:44
0

This was not a problem with object creation but with a bug (or change in behavior) in Server.CreateObject() and some code which handled multiple versions of a different COM DLL.

There was code that handled multiple possible versions of a DLL as follows:

    obj = Server.CreateObject("Version1.Object")

    If Err.Number <> 0 Then
        obj = Server.CreateObject("Version2.Object")
    End If

At the end of this, assuming one of these was successful, Err.Number = 0

In IIS 10.0 (Server 2016) a successful Server.CreateObject("Version2.Object") left the previous value in Err.Number from Server.CreateObject("Version2.Object").

New code:

obj = Server.CreateObject("Version1.Object")

If Err.Number <> 0 Then
    Err.Clear
    obj = Server.CreateObject("Version2.Object")
End If
Scott H
  • 11
  • 5