Welcome to Kenn and Mark's SOAP Page

undercon.gif (293 bytes) The paint is still wet... :) Sorry.undercon.gif (293 bytes)

0672319225c.jpg (5299 bytes)

Here you can download code we developed for Understanding SOAP, ISBN 0-67-231922-5. (The publisher's site is here, which may have additional stuff...) We plan to enhance the code from time to time, so check back to see if things have been updated. Here is what you can download (updated 11/10/00):


Some additional things available here:

Release Notes:

pin8.gif (218 bytes)SOAP 1.0: This code was originally for the book when the 1.0 specification came out. During writing, the specification was upgraded to 1.1, so this code did not ship with the book. However, here it is if you want it. It has the same features as the 1.1 code with the exception that it produces SOAP 1.0-compatible packets.

***NOTE*** The download includes only the client-side code/objects at this time (Mark is on a well-deserved vacation, so I can't get his 1.0 code from him). When the server-side code/ISAPI DLL is available, I'll include it in the download and remove this note.

***NOTE*** This code is considered unsupported (with my apology). Also, the C++ SOAP object model code is slightly different for the 1.0 version. The 1.1 version (that shipped with the book) included some slight changes to the object model that made some aspects a bit easier to use (such as when adding standard SOAP attributes, such as mustUnderstand and root, which was called rootWithId under version 1.0).

pin1.gif (212 bytes)SOAP 1.1 (book version): This code was shipped with Understanding SOAP. It encodes certain types of COM interfaces:

The code implements an architecture that intercepts or delegates your COM object. Essentially, it replaces DCOM with a SOAP infrastructure (but please don't expect all of the DCOM functionality, such as security).

Interception involves modifying the Registry to replace the COM server filename with our SOAP Object Surrogate such that when you CoCreateInstance() your COM object you instead create our SOAP client that makes the remote method call for you.

Delegation allows you to tailor specific COM interfaces for SOAP use. You do this by CoCreate'ing the SOAP client, and then by creating a SOAP'ed instance of your interface using the SOAP client's ISoapControl::CreateInstance() (click here for a sample).   Don't worry...we ship a client application that handles all of this configuration stuff for you.

Thanks! to Mike Parent for finding a bug in the SOAP configuration utility that prevents proper delegation. The code download includes a fixed version of the configuration utility...

The download contains these items:

Please do read the installation document, as it tells you a bit more about what you're getting, how to use it, and how to re-compile it.

pin4.gif (211 bytes)SOAP 1.1 (enhanced version): Essentially the book's 1.1 code (above), plus support for:

(Black items are implemented, gray items are planned.) This code is under development and will be completed as time permits (structs and linked structs are done at ths time...). Note that array support, when implemented, will probably be limited to SAFEARRAYs and their variants because the IDL size_is() attribute is dropped when the type library is compiled (we won't know the method argument is an array, nor will we know how large the array is, just by scanning the type library, which is unfortunate...details when the code is available).

Comments? Questions? Drop us a line:

Kenn (SOAP client-side code) @ kenn@endurasoft.com

Mark (SOAP server-side code) @ mstiver@yahoo.com

This page last updated: 03/05/2015