WebHub Object Pascal Components

Dynamic ServerProfile without dash symbol v3.200
This error message, "SetName ServerProfileSP-2109787722 is not a valid component name" has been resolved.
This problem had happened after Windows was running long enough for GetTickCount to return a negative number.
Source: webInfoU.pas
JSON wrapper supports array syntax v3.200
Please see the online reference; search for JSON.
Note this JSON wrapper requires Delphi XE2 or later.
Source: ucJSONWrapper.pas
Corrected cross-AppID links with short URLs v3.200
When UseAppID was false, the target AppID was not inserted when StreamCatcher was also used. This problem had been introduced in v3.195.
Source: LocAWO in whcfg_App.pas
TwhdbSourceIBO improved for IBObjects v3.200
The cloned dataset will have the same TIB_Connection and TIB_Session as the master copy. The TIB_Transaction object can cloned or similarly shared, depending on the Boolean property CloneTransactions.
This means that there is no longer a need to set those properties in BeforeOpen event handler on the TIBOQuery.
Source: wdbIBObjOSource.pas
XSD for App-Level Config v3.200
The new date for the XSD is 201309. The complete url is http://static.webhub.com/xsd/cv004/WebHubAppConfiguration201309.xsd
Fixed: component whScan explicitly supported; whdbSource FieldSets supported.
XSD for App-Level Config v3.204
The new date for the XSD is 201310. The complete url is http://static.webhub.com/xsd/cv004/WebHubAppConfiguration201310.xsd
XSD for App-Level Config v3.207
The new date for the XSD is 201311. The complete url is http://static.webhub.com/xsd/cv004/WebHubAppConfiguration201311.xsd
Fixed: component whStringGrid explicitly supported (required for Hub v2).
Hints added for configuring the list of Teko files.
App-Level Config Validated v3.200
The WebHub Components now validate the application-level XML file in the same way that ZMAdmin does. This means that syntax errors within the XML file will no longer be ignored when the WebHub application EXE loads. It also means that portions of the components that WRITE to the XML file will maintain the integrity of the node sequence, most notably the email panel.
There are two new properties on the Central Info component to support this. ConfigFileXsdSummaries: TZaphodXmlDoc and XSDSummaryFilespec: string.
If you want to download just the latest WebHub cv004 XSD summary file without waiting for a new Runtime Setup, you will find it here.
If there are inconsistencies between the WebHub Component source and the application XSD, EZaphodException will be raised and handled. The exception text will be saved as a Refresh error which is visible on the Html > Errors panel and in the log file for the app.
Delphi XE5 Supported v3.200
WebHub v3.200 source compiles with Delphi XE5 VCL. The non-gui base layers also compile for FireMonkey, notably ZaphodsMap and most of TPack.
Sync to main thread v3.200
This change is relevant for WebHub apps that touch the GUI during page execution. One example of this is the standard email panel, when used with its optional GUI.
The WebHub page calculation occurs inside a thread, and that is now synchronized to the main thread when OnNewMail is called. If using CodeSite, this is when you see 'HubSentWork' in the log.
Google Sitemap v3.201
If using StreamCatcher and a non-blank ProjectLingvo, the googlesitemap will now contain the default projectlingvo in the URLs within the map.
Example: <loc>http://www.csweb.biz/en/csweb/contact</loc>
Source: webhub\lib\whsample_GoogleSitemap.pas
Reject Session with Short URLs v3.201
If using StreamCatcher in the current server profile, RejectSession will bounce the surfer to a short URL. Previously, rejected surfers were bounced to a long URL even when StreamCatcher was in place.
Session.SessionLingvo v3.201
This property returns the surfer StringVar['guestlingvo'], or if that is blank, the ProjectLingvo setting.
Mail.HostName length extended v3.201
The prior maximum length for the smtp host was 32 characters. Now it is 253 characters.
AjaxObserver component v3.202
A webaction component named AjaxObserver is included in whsample_PrototypeJS.pas
AJAXTimedEvent has been retired.
See http://lite.demos.href.com/htaj demo.
Added ftWideMemo support to TwhdbSource v3.202
This is important if using the latest version of IBObjects v5.
Added ftFloat support to ucIBObjCodeGen.pas v3.203
whsample_DMProjMgr for v3 v3.203
There was an Include statement missing from the top of whsample_DMProjMgr and that is now present. The line is {$I WebHub_Comms.inc} and it had been missing since 6-Aug-2013.
That line simply brings in the correct compiler DEFINE for WebHub v3.
NativeXml, ZaphodsMap: calls to NodesByName v3.203
Added checks around calls to NodesByName to avoid access violation. This had been an issue in some cases with WebHub and the Restorer on form close.
WebHub and Rubicon v3.204
Previously, WebHub Components had to be installed before Rubicon. Now you can install either one first or second. Both register TtpComponentPanel as a component.
new property: pWebApp.UseSharedLogFolder v3.203
See online docs. This is important if you are working on troubleshooting, especially if you are using the runner or Hub that logs to CodeSite CSL files.
Forget Restorer v3.203
See online docs. There is a new way to make WebHub applications Forget the restorer component. This is recommended when deploying as-service or when deploying multiple instances.
Correction for on-exit A/V fixed in v3.204. This was noticable only when certain panels were visible in the GUI, including the HTML panel.
Error Reporting v3.203
For unrecognized expressions, webSend.pas reports the TekeroID which was active at the time of the attempted expansion.
New property: Security.ReadOnlySessionID v3.204
Set this to a SessionID that should be reserved for API calls such as AJAX or SOAP requests -- where you want speed and zero save-state for that single SessionID.
See also: new virtual function on TwhApplication: IsReadOnlySessionNum
To try this, go into any of the lite demos with either the user agent set to a popular webrobot or with session number 999999.
To configure, use ZMAdmin, navigate to your AppID, and expand sections until you get to the Security properties.
If you were counting on saved-session-data for the guest lingvo for webrobots, you may need to change from guestlingvo in WHTEKO to the new SessionLingvo property, because the latter automatically defaults to the project lingvo and thus generates no errors when expanded.
StreamCatcher: WebRobot session is readonly v3.204
This applies only to people using StreamCatcher.
The session dedicated to WebRobots is now readonly. It is never saved.
One consequence is that OnNewSession will fire *often* for webrobot user agents. Be careful to avoid logging in OnNewSession for the WebRobot session number, otherwise log files on production servers will be Very Large, Very Quickly!
New methods for testing 403 conditions v3.204
These are on the TwhResponse component: SimulateAppNoRunning, SimulateAppCoverPage, SimulateAppIDBusy, SimulateHubNotFound, SimulateRequestTimeout.
Example usage is in the webhubdemos project. See monitor.whteko and whdemo_Extensions.pas.
XE5 Update 1 v3.204
DCU files for XE5 are being built with update 1 now.
Tuning for TIBOQuery v3.204
This applies to people using IBObjects.
The webdatasource has been customized so that the DoBeforeClone method automatically checks whether the TIB_Statement has been prepared, and if it has not been, the Prepare method is called. This matters when the SQL.Text is modified by the OnBeforeOpen event handler of the TIB_Statement (e.g. the TIBOQuery).
In addition there is a new OnBeforeClone event handler available on the base webdatasource, in case any further custom modifications are required.
This should help avoid this message: Assertion failure (IBODataset.pas, line 7367).
CodeSite Logging v3.204
For those compiling with CodeSite, the following are now automatically logged to aid in tracing program logic: CLEAR|* (clear all stringvars), SESSION command, and each webaction.execute call.
Fixes for access violation in webdatasource v3.205
TwhBasicSession.SaveStates in webVars.pas has been fixed so that when the SessionEndWith is seIgnore or seDelete, there is no attempt made to run through any save-state steps.
Note: after a call to RejectSession, SessionEndWith is seIgnore. (This is not a change, just FYI.)
If you bounce badly behaved webrobots or other agents, set SessionEndWith to seIgnore before doing the bounce.
It is possible to patch this change into earlier versions of WebHub.
A new method TwhdbSource.DoBeforeHouseClean now makes sure that any DataSet that is Destroyed by HouseClean will not be referenced by the owning webdatasource. The symptom with this (former bug) was that an attempt to reference the DataSet property could yield an access violation if-and-only-if HouseClean had run earlier on the same page for the same session and due to OpenDataSetRetain seconds having elapsed, the DataSet had been destroyed.

Catch references to nil WebAction.Execute v3.205
There is now code in both tpAction.pas and webSend.pas to watch for any attempt to execute a nil webaction component. This may have happened when there was a .Execute of an invalid component name (i.e. typo).
TtpAction.DoExecute does nothing if Self does not point to a valid TtpAction.
CodeSite Logging v3.205
This applies only if you compile with -DCodeSite.
The log will contain a mention of each web action when called.
The log will contain a mention of each component destroyed by HouseClean on a webdatasource.
For quickest overview of site traffic, use CodeSite Viewer, menu: Organize > New View. Select these 4 message types: Warnings, Errors, Exceptions and Level 4.
WebDataSource: expiration of cloned datasets v3.205
Previously the Tag on the cloned dataset contained the expiration tick count. Now it contains the last-active tick count.
DoBeforeHouseClean is called on TwhdbSource to set FDataSet to nil when (cloned) dataset is about-to-be-destroyed by HouseClean.
htThread and whAsync units are being retired v3.205
These units are no longer included in the core WebHub package.
The TwhAsyncAction component is no longer registered on the palette.
Developers should refactor projects to use Delphi OmniThreadLibrary.
The async demo has been refactored and is live on http://more.demos.href.com/htasync.
As of v3.206, the whasync unit is not included with WebHub.
String concatenation with JSON wrapper v3.206
You can now concatenate strings coming from the JSON wrapper class without first explicitly casting those values to string.
Source: ucJSONWrapper (in TPACK).
tpStreams.pas v3.206
Handle exception within TtpStream.ReadLWideString (this had surfaced within WebHub EXE in rare cases)
Critical Section lenience v3.206
More classes now call TryEnter rather than Enter for TCriticalSection processing.
Source: tpStatus.pas, webSplat.pas
Session Cookie erased upon RejectSession v3.206
RejectSession had not been erasing the session cookie when, for example, the user agent switched from human to webrobot.
Source: webVars.pas, webSend.pas
Fix to tpStreams.pas v3.206
ReadEncodedLength and WriteEncodedLength: fixed
This solves the problem with the Hub-runner-app disconnect after certain URLs.
INPUTDEFAULT command added v3.208
This can be used with any HTML input tag including the new HTML5 types such as number, range, color, etc.
Syntax example: input type="range" name="inX" value="(~INPUTDEFAULT|inX~)"
Syntax example: input type="number" name="inY" value="(~INPUTDEFAULT|inY~)"
Syntax example: input type="month" name="inExpMo" value="(~INPUTDEFAULT|inExpMo~)"
Syntax example: (~INPUTDEFAULT|txtVar.txtMessage~)
Generally the name of the input would be the same as that passed to INPUTDEFAULT.
No debug (log) entry is created if the stringvariable is blank or does not (yet) exist.
See the Lite FORM demo for examples.
Source: htWebApp.pas
Decode > Count Report v3.209
The WebHub Syntax Report, previously available only on the Html > Decode > Count panel, is now available on the HTML > Errors panel. Use the button on the toolbar to start the report.
The implementation has been moved to a separate unit. Delphi coders can call the report directly from any Delphi button or TwhWebAction component.
Source: uCheckWhtekoSyntax.pas, procedure WhtekoSyntaxReport.
Branding - retired v3.209
The lite branding demo has been deleted.
The SendJumpBrand and related methods have been deleted.
The BRANDFILE command has been deleted. Use INCLUDE to send the content of a static file within a dynamic WebHub page.

The Hub, WebHubAdmin, ZMAdmin

Higher priority to Covered AppID message v3.201
If an AppID has been covered, then that information will be reported to the surfer, even if the associated process is not running. (v3.200)
If an AppID has been covered, then that information will be reported to the surfer, even if THE HUB is not running. (v3.201)
Avoid AppIDBusy when Debugging from Delphi IDE v3.206
Default AppAverageCalcMSec to 10ms; avoid using any values over 5 seconds when calculating average
Non-responsive Hub - resolved v3.206
Certain URLs in certain sequences with certain posted data packets were able to reliably disconnect the runner and hub, making all requests time out. You must recompile with components v3.206 and use the latest v3.206 Hub and Runner to get the fix. Combining older components with the latest runtime will not work.
Fixed A/V on exit v2.207
Old-ipc only: upgrade to v2.199 or to v2.207+.
This a/v showed up when hub was started and stopped without routing any requests.
Fixed startup exception v2.207
Old-ipc only
Regarding this exception during Hub.exe v2 startup: "Method GetXPathElementsEx reports: XPath is invalid: /WebHubAppConfiguration/ComponentConfig/whStringGrid not found in XsdSummary" ... the problem was in the webhub\config\ZMAdminPanel-WebHub-cv004-xsdSummaries.xml file. A corrected file is included with v2.207.
Output Panel captions v3.207
Captions for the trace feature have been reset to fit better on their toolbar (Delphi XE5).
Trace Button activates based on whether the AppID has refreshed. (Previously it activated based on whether an active Connection was available after Refresh.)
Lite/Evaluation Usage v3.209
In case of excess use with a lite or evaluation license, the CodeSite log for the app will contain some details which can be reviewed with technical support. Regardless, the cure for 'Terminating @wb685' is to install a proper paid license.
Use ZMAdmin to enter the license or edit WHLicense.xml in Notepad.
Order deployment licenses at www.href.com/hrefshop
Hub/Runner connection v3.209
Significant fix for intermittent hub-runner disconnect (which in earlier versions could only be reset by server reboot or by stopping both w3svc and hub services, then restarting Hub, then restarting w3svc).
The symptom of this problem was that requests for ?h:vers would fail even when Hub was running.

WebHub Runners

WHRunner429 http header is obsolete v3.200
The ISAPI runner had been sending a 'WHRunner429' http header for tracking purposes. Now it does not do that.
X-CoverMinutes http header v3.200
When an AppID has been covered, the runner will report the number of minutes of expected downtime as an HTTP header for use by javascript on the client side. This is in addition to the details reported in the payload of the http response, i.e. maintenance start time, number of minutes and reason for downtime.
Branding mode - retired v2.209
The old-ipc mode runner had support for a brand command. This feature is no longer available.