Running Inmagic Genie without Content Server

by Peter Tyrrell Thursday, December 13, 2007 10:17 AM

Why not hack Genie this holiday season? Chestnuts roasting on an open fire, Jack Frost nipping at your nose, Genie excised from Content Server and forced to run on DB/Text Webpublisher... Ho ho ho!

This was my first run at getting Genie to work with DB/Text Webpublisher instead of CS Webpublisher. There is definitely room for improvement, but this was the proof of concept.

There are just two tweaks, neither of which involve access to Genie's source code: 1) a redirect from /ics-wpd/exec/icswppro.dll to /dbtw-wpd/exec/dbtwpub.dll, and 2) alteration of Genie SOAP file locations in web.config. Oh, and of course, one must recreate all the Genie textbases in DB/Textworks. Alright, three tweaks.

httpRedirect

I did this on a Vista Ultimate machine, so the specifics are valid for IIS 7 only, but the concept is still applicable to IIS 5 or 6.

Internally, Genie has the CS Webpublisher ISAPI location hard-coded all over the place. Since it is not possible to override these within the Genie application, we have to do it externally, which is where HTTP redirect comes in.  Thus Genie merrily continues to make requests to CS Webpublisher, but we re-route all those requests to DB/Text Webpublisher.

In applicationHost.config, I enabled httpRedirect with a response status of "Temporary" (we'll see why in a minute) and added a wildcard to route CS Webpublisher requests to DB/Text Webpublisher:

<httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Temporary">
    <add wildcard="/ics-wpd/exec/icswppro.dll" destination="/dbtw-wpd/exec/dbtwpub.dll$Q" />
</httpRedirect>

The $Q placeholder sends all querystring variables to the new URL, which covers GET requests. The response status "Temporary" (HTTP status code 307) is the only response status which sends POST requests on to the new URL. Permanent (301) and Found (302) will not. So that covers POST requests.

This redirect is a client-side redirect, and as such is not terrifically efficient, but it works. A server-side URL rewrite would be a vast improvement.

SOAP File locations

When Genie installs, it places a pile of SOAP files for its textbases in CS Webpublisher's \SOAP folder. We move these to DB/Text Webpublisher's \SOAP folder instead.

e.g.

c:\program files\inmagic\icsweb\soap\*.*

to

c:\program files\inmagic\webpubpro\soap\*.*

Then, in Genie's web.config, find the section called <Genie.Properties.Settings> and modify the URLs for the *.icx files to point to DB/TextWebpublisher's /dbtw-wpd/soap/ location:

<setting name="Genie_BorrowerSOAP_BORROWER_SOAP" serializeAs="String">
    <value>http://localhost/dbtw-wpd/soap/BORROWER_input.icx</value>
</setting>

Textbases

To create a DB/Text database from a CS version, create a textbase structure backup, which produces a file with a *.cbb extension. Rename the .cbb extension to .tbb. Create a new textbase from DB/Textworks and restore from the .tbb file. Now you have a DB/Text textbase whose structure matches its CS version exactly.

Then export data from the CS database as a .dmp, and use the "Load Textbase" feature in DB/Text to import it to your new DB/Textworks database. Export form elements from the CS textbase and import them into the DB/Text database.

It takes 5-10 minutes to completely re-create a CS textbase in DB/Textworks.

Conclusion

The above is an intellectual exercise, and I'm not sure what benefit might be gained by doing it, but it proves that it is possible to run Genie on DB/Text instead of Content Server, without access to Genie source code.

blog comments powered by Disqus

Month List