WebHub Object Pascal Components

New-IPC v3.150
WebHub v3.150 introduces a new type of interprocess comms which will eventually run on Linux as well as Windows.
On a per-deployment-machine basis, you must use either v2.x or v3.x. You cannot mix.
Details about how to switch between versions during development are in the README file supplied with the WebHub Components.
The good news is that all WHTEKO, XML and PAS code is 100 percent compatible as long as you recompile.
As of December 2011, HREF Tools has converted almost al public machines to the new-ipc edition. There is a chart at the bottom of the www.href.com/whversion page, where progress is tracked.
Start Apps before or after Hub v3.150
This was an issue in v3.148 and v3.149 only. You can now start apps before or after the Hub service, and they will connect and serve pages properly.
Memory leaks fixed v2.150
Detected by EurekaLog v6.
1. Fixed in utTrayFm.pas
2. Fixed in whMain.pas
TtpSharedLongint now better known as TtpSharedInt32 v2.150
As a reminder about the data size, the TtpSharedLongint component is now called TtpSharedInt32. TtpSharedLongint is an alias to that.
If you search and replace the class in your own code, be sure to change it in *.pas and *.dfm.
Static sites: /index.html stripped from export url v2.151
For WebHub sites that are exported, for URLs ending in /index.html, the URL is referenced as purely /.
ThtObjectStore.AllocateInstance terminates application if out of memory and compiled with CodeSite v2.151
If you do not compile with -DCodeSite then the behavior is the same as before, i.e. an exception is raised.
This code runs during all parsing, including all page generation, i.e. on every hit. It can fail when Windows memory it too severely fragmented.
Reference: htObjMem unit.
Improved session cookie handling v2.153
Fix in cgiVars.pas: give precedence to new-session number assigned by Hub, rather than session cookie.
NB: a limitation in v2.153 is that 1 AppID must use 1 cookiedomaindefault for all session-number cookies. If you are running 1 AppID on 2+ domains on a machine, then you should not use v2.153.
RejectSession always resets session cookie to blank v2.153
Reminder, if you want to use session cookies, set (a) the name of the cookie and (b) the domain using ZMAdmin. This first setting goes into WHCentralInfo.xml and the second one goes into the application-level configuration file.
For Advanced Cookie Processing v2.154
New method: pWebApp.AddCookieWithSessionNumber
Response.DoOpen allows second optional parameter v2.154
TwhResponse.DoOpen can accept a CustomContentType for sending mime types that are not built-in (reference webPrologue.pas).
TOnHtmlOpen event handler also adds a CustomContentType parameter.
HaveSessionCookie no longer Boolean v2.154
If you have custom event handler code referencing HaveSessionCookie, change bForceNewSession := HaveSessionCookie; to bForceNewSession := (HaveSessionCookie = whsncPresent); // uses runConst
Small fix, JUMPs in v2.154 v2.154
Fix a small issue that was introduced in v2.154 and was a problem in JUMPs to a local ServerProfile without StreamCatcher.
The fixed unit was whcfg_App.pas
Small fix, new-session event handlers v2.156
Three units changed: dmWebHub, whsample_EvtHandlers, whsample_DWSecurity
The units now use the same code in their On New Session event handler. A CodeSite warning is sent when an unexpected session number cookie is detected. The surfer is bounced to a new clean session number.
DFM files confirmed compatible with Delphi XE2 Update 3 v2.156
Reference: Delphi XE2 Update 3 release notes especially the part at the end about ModalResult
All our DFM files had ModalResult set as 1 or 2. No changes required.
Setup alerts you to reboot on first install v2.156
For new installs, the Setup detects that the PATH needs changing and adjusts it. Often a reboot is required for Delphi to notice the change. A reminder to that effect is in a dialog box for new users now.
In /S Silent installation mode, the dialog is suppressed.
RefreshWebActions - all of them, all at once v2.156
Instead of calling RefreshWebActions in the Init of each datamodule and panel, you can now call it with zero parameters from the unit containing TtpProject, once, and that will do all TwhWebAction components on all TDataModules in the application.
For best results, use the OnStartupComplete event handler as the spot to call this, because that fires after everything has been fully created and initialized.
New: ToggleHighlighting(on/off) for HTML panel v2.156
If you wish to programmatically disable the syntax highlighting (for performance reasons or otherwise) on the HTML panel, you can call fmAppHTML.ToggleHighlighting(False); // uses whHTML to disable it.
Important fix for Apps that use session cookies v2.157
In webCall.pas, this method was fixed: TwhConnection.DoExecute.
In order to see the symptom that this fixes, two user agents are needed. One must accept the session cookie. One must refuse the session cookie. After creating separate new sessions for each, alternating requests between the two would cause the session number of the cookied-surfer to leak onto the no-cookie-surfer.
This problem was in the old-ipc components only.
Delphi XE2 with Updates 1 and 2 v2.157
WebHub Components v2.157, v3.157, v2.158, v3.158 support Delphi XE2 with either update 1 or update 2 but not update 3.
Session cookie expires in GMT v2.158, v3.158
Session cookie expiration had been wrong on servers not using GMT for Windows clock.

The Hub, WebHubAdmin, ZMAdmin

Hub.exe compiled with Delphi XE2 v2.150, v3.150
Hub version check v3.150
'h' is a reserved id for extremely quick, short responses from the new-ipc hub
?h:vers returns the hub version digits
?h:pcv returns the pascal compiler code used for the new-ipc hub
Note: the new-ipc hub does NOT contain (the overhead of) a classic HubApp
Bug fix in Hub on-exit v2.150
There had been a problem where the Hub.exe could hang during hub.exe -install when the service was already installed.
64-Bit Hub ready to test v3.150
To test on 64-bit, ideally you should use the new v3.1x Hub, WebHubAdmin, runisa64.dll plus WebHub applications compiled with Delphi XE2 and WebHub v3.1x for win64. Having said that, you can leave the apps as 32-bit initially, although for performance reasons you will probably want to convert them to 64-bit as soon as possible.
For an excellent overview on 32- to 64-bit issues in Delphi, see this video from Code Rage 6, presented by EurekaLab. Of interest to anyone trying to cross-compile between old/new Delphi plus FreePascal should be slide #11, entitled "64 bit data models - data models overview" which clarifies the sizes of integers in a matrix of compilers and platforms including Linux, MacOS, SPARC64 and Unicos.
XSD change for Central Info v2.154
Now using: http://static.webhub.com/xsd/cv004/WebHubCentralInfo201111.xsd
This adds the SessionLocation feature.
The WebHub Runtime Setup will apply this to your configuration automatically if you let it. Watch for a checkbox on an early screen where you toggle on the runners.
XSD change for Network Info v2.159
Now using: http://static.webhub.com/xsd/cv004/WebHubNetworkInfo201112.xsd
This adds the AdvancedFlags feature for each runner. Leave this field blank unless advised otherwise by tech support.
Logging during silent install v2.156
It is now possible to collect troubleshooting information during a silent install of WebHub.
How-to Reference: online help
Hub service, no error if already installed v2.156
The as-service code detects when the service has already been installed, and skips the install (and consequent error dialog).
ISAPI runner fix (cookie support) for certain apps v2.157
This fix is needed in conjunction with some but not all custom WebHub applications. If you have any trouble receiving cookies in your web browser, you should use the v2.157+ runner.
Two tools are highly recommended for cookie troubleshooting. (1) CodeSite logging - use the debug runner that can be found in the extra 7z archive, and turn on CodeSite. (2) Firefox with the Live HTTP Headers add-on enabled.
NB: make sure your hosts file references an ip number other than for any domain you want to test locally.
WebHubAdmin reports physical CPU count v2.158
WebHubAdmin had been reporting 1 CPU instead of counting physical CPUs.
This is relevant for v2.1x not v3.1x.
Setup: Reset XSD for XML files v2.158
In silent mode, no XSD lines are changed.
In normal mode, exceptions are caught within the ResetXSDForXML function.

WebHub Runners

Important fix relating to session cookies v2.153, v3.153
The symptom (e.g. in v2.152 and earlier) was that, when session cookies were enabled, if a surfer returned with a session cookie that did not match an existing VAR file, the surfer would be bounced repeatedly, without gaining entry to the site. This was rare but could happen with certain test conditions (e.g. deleting VAR files between test runs) or with certain user agents storing session cookies in spite of finishing a session (i.e. disrespecting the expiration information).
The runner now converts such session cookies from, for example, 'SESSION' to 'INVALIDS_ESSION' where the underline is Chr(183). This prevents the application from detecting the cookie as a valid session cookie, and that prevents the endless looping.
SENDFILE keyword v3.154
The runner now expects the web application to provide the prologue, including corrent MIME type and cookies, when requesting that a local file be sent. Therefore this new-ipc runner must be used with app components of the same or later version (3.154).
Version response reports problem with ZaphodsMap root v2.154
It is fairly easy to configure a system where the ZaphodsMap root is visible to the end-user but not to the runner. For example, if you use the SUBST command to make a drive, and use that drive for ZaphodsMap, that will work for the end-user on Windows 7 but never for an ISAPI DLL.
Now as part of the version response, the runner checks whether the ZaphodsMap root "exists" from its perspective.
A problem with the ZaphodsMap root will also stop the Hub service from starting. The error on Windows 7 may be access denied.
Experimental: add runner critical section v2.159
For old-ipc isapi runner only: if you set the runner AdvancedFlags to v2cs, the runner will use a critical section around the entire request. This will slow performance and may improve reliability on some systems.
Runner validates DelayMS config setting v2.159
Values less than zero are forced to zero. Values greater than 5000 are forced to 5000.