You can build such a system and its easy using the right building
blocks. I'll refer to the system shown in figure 1 as XIR (XML-based
Internet RPC). A client-side control handles making all server-calls
and returning output. The control packages all method calls and their
parameters and sends -via HTTP POST- this over the Internet to the
XIR ASP page. This is a generic page with only a couple lines, it
simply turns around and calls ProcessRequest on the XIR server. The
server is then responsible for instantiating your COM component,
calling methods, passing parameters and returning output. To do its
job, the server needs a mechanism to call any method given its name
at runtime, that's what XIR Call-By-Name (XIRCBN) does.
Figure 1: XIR System Overview

Before we get into the details of the client-side interface and
how it is used, let's understand how we can actually call components
over the Internet. First, the XIR server needs to know the
component's ProgId, the method name and the method signature.
Although the XIR server can use a component's type library to find
the method signature, it is more efficient to just provide it along
with the method name.
You can think of each method on each component as a unique service
provided to the client. A catalog is needed to map each unique
service name to component ProgId and method name. To provide this
information, I created a services catalog as an XML document
containing a list of server-side components and methods that are
callable from clients, each assigned its own unique service name as
in figure 2. Each parameter has a type attribute that defines its
data type using the vbVarType enumerated values. This document
resides on the server and is fairly static. You need to update it
only if you add/remove or otherwise change components or methods
callable by the client. The process of adding a new service to the
catalog can be thought of as publishing this new service.