Based on my research, GetActiveObject obtains a running instance of an object from the running object table (ROT). Each WinStation has it's own ROT. The interactive desktop is one WinStation and has it's own ROT and that is where the desktop application will have registered the running object. The ASP.NET process is running under a seperate account and exists in a non-interactive WinStation with its own ROT. That is why it fails.
I think the only way for this to work would be to launch the third party application process from ASP.NET so it exists in the same WinStation. Of course the application will then not be visible and the user cannot interact with it. -------------------------------------------------------