WebHub Object Pascal Components

Summary documentation added for ucIpConfig, ucString source v2.180
Reference: http://docwiki.embarcadero.com/RADStudio/XE3/en/XML_Documentation_Comments
New routine: IbObj_Prepare v2.180
This can be called instead of Prepare when logging of exceptions due to improper SQL is desired.
New routine: IbObj_PrepareEx v2.180
This extended variation takes care of verifying that the connection, transaction and session objects are non-nil, that they are hooked up to one another and to the TIB_Cursor or other statement that needs to be prepared, and then calls IbObj_Prepare.
Use this when it is not possible to use IbObj_PrepareAllQueriesAndProcs. The most common use-case is when a TIB_Cursor is instantiated at runtime long after the Init method of the datamodule is complete.
Example: change crs.Prepare; to IbObj_PrepareEx(crs, gproj_Conn, gproj_Tr, gproj_Sess);
By default, IbObj_PrepareAllQueriesAndProcs supports native TIB_* components only. Compile with -DUSE_TIBODataset to support TIBODataSet components such as TIBOQuery. Source: unit ucIBObjPrepare.pas.
whFirebird demo uses this. Firebird demo against employee table
whSchedule demo uses this. Code Rage Schedule
Setup manifest requests user, not admin, permissions v2.180
This is a big change in terms of UAC. The WebHub Components Setup now specifically requests user permission rather than admin permission.
This makes it easier for the Setup to make registry changes that match those required by Embarcadero Delphi, assuming that you run Delphi as-user not as-admin.
The particular use-case which had trouble in previous versions was: Win2008 RC2 64-bit hardware with UAC active, with Delphi installed on the server. The Setup routines had been unable to see the Delphi RootDir and failed to install. This is now fixed. Many thanks to WebCentre.co.nz for running dozens of tests to determine what could work.
In case you use NSIS for installations, some hints: RequestExecutionLevel user; swap all use of HKLM to HKCU unless absolutely necessary; consider swapping use of TRegistry within DLLs loaded by NSIS under user context to an EXE called by ShellExecWait; zero need for UAC_plug-in; SetShellVarContext current.
TRegistry within ucRegistrySetup.pas v2.180
Delphi TRegistry does not support all Windows features in terms of giving the developer an easy way to control *which* registry is accessed. Experience varies depending on 32- versus 64-bit compilation, 32- versus 64-bit hardware, plus OS version, plus user privilege versus Run as Administrator, plus the state of UAC.
As of v2.180, the FindDelphiRootDirInRegistry routines (source in ucRegistrySetup.pas) use three different ways of looking for Embarcadero Delphi settings before giving up. The only situation in which this fails is the (hypothetical) situation of a 64-bit installer with 64-bit DLLs on 64-bit hardware. This is a limitation of TRegistry and is being ignored while all installers remain compiled for the Win32 target.
NB: The TZaphodsMap.DefaultUserName property changes depending on whether a process is run by an end-user (in the Administrator group) or by that same user but with Run-As-Administrator. In the first instance, DefaultUserName equals the Windows user name, e.g. 'user1'. In the second instance, the DefaultUserName equals 'Administrator'.
ZaphodsMap v1.044 included v2.180
New unit ZaphodsMapInstall.pas includes a new function, GetGlobalEnvironment, which can be used by an installer to obtain the value of any env var set by another process.
New function, ZaphodsMapEnvVarInclTrailingDelimiter, in ZaphodsMap.pas, can be used instead of calling SysUtils.GetEnvironmentVariable directly. If you compile with -DZMINSTALLER then it will automatically use GetGlobalEnvironment whenever necessary. Generally this compiler define is required only when building DLLs loaded by installers.
ZaphodsMap source has a public open source repository now. ZaphodsMap on SourceForge.net. The subversion root for the files used in WebHub is https://svn.code.sf.net/p/zaphodsmap/code/trunk/ZaphodsMap/Source
ucRegistrySetup for Delphi 2009 v2.181
Minor edits to enable compilation with D12.
new function: LeftOfLastDelimiter v2.181
Source: ucString.pas
ucIBObjCodeGen_Bootstrap.pas improved v2.181
To support the latest version of IBObjects (late November 2012), the unit generated by IbAndFb_GenPAS_Connect() now explicitly hooks up the TIB_Connection and TIB_Transaction to the global TIB_Session. This avoids exceptions upon subsequent opening of a TIB_Query, etc.
If you previously generated a unit such as uFirebird_Connect_Employee.pas for your own project, you should regenerate it.
There is a new project in WebHubDemos which generates this one unit for a given project. You can fill in your own project abbreviation and select your own target to-be-generated-unit name. Look for webhubdemos\Source\WHApps\DB Examples\whFirebirdIbObj_Bootstrap.dpr. That should compile easily for anyone with WebHub and IBObjects installed in Delphi 2009+. WebHubDemos revision 1076.
Additional source included v2.181
Source included for ucClonDB.pas and ucClone.pas, primarily so that you can see when cloning occurs within webdatasource. Compile with -DCodeSite.
Updated logging in wdbScan.pas v2.181
If WebDataSource is unable to automatically open the DataSet, a warning is logged, regardless of whether CodeSite is used.
HTML Panel avoids SetFocus during startup v2.181
This avoids a startup error: cannot focus an invisible or disabled window. By the way, Visible is always True and Enabled is always True in this case. The Exception text is misleading.
RefreshWebActions clears splash screen v2.181
Previously you had to call WebMessage('0'); if you wanted to clear the splash screen after RefreshWebActions.
Source: webLink.pas
Files for D17 compiled with XE3 update 1 v2.181
Delphi XE3 Update #1
TtpProject: added CodeSite logging v2.182
Source: tpProj.pas
SwapChar function optimized v2.182
Call the ReplaceChar function if you need a string returned. Otherwise use SwapChar because it is faster when the string is passed-by-reference.
Source: ucString.pas
New unit: ucMetaChars.pas v2.182
The routines in this unit can be used to swap out html meta characters, i.e. left and right angle brackets. For example, if the runner is sanitizing HTML tags and you want to receive them, you can (probably) just use the RevertWebAngles function against the few fields where HTML is acceptable.
Reference msdn for further advice about customizing web applications to protect against script injection. Microsoft's advice is ASP.NET-centric but most of it applies to any web application.
Source: included if you license TPack or "WebHub Useful Source".
TwhScan remembers default PageHeight for each new surfer v2.182
Source: webScan.pas (included if you license "WebHub Useful Source").
New unit: whutil_ValidEmail.pas v2.182
New functions: StrContainsEMail, StrIsEMail, ReplaceEMailWithinStr based on regex for email, using optimized RegEx library included with WebHub.
Source: included with registered (paid) WebHub Components.
New: FlagConfigWithEXE Boolean v2.182
This is relevant for production servers with more than one WebHub EXE. See online documentation.
Integration with StreamCatcher v1.902 v2.182
For public sites using StreamCatcher, WebHub JUMPs to URLs containing a command will include /0/ or :0: as a placeholder for the session identifier, for webrobots only.
Older versions of StreamCatcher require custom rules to make this work; recommend using StreamCatcher v1.902 where acceptance of the /0/ is automatic for webrobots. Use of WebHub v2.192 with older StreamCatcher can lead to loss of URL ranking so upgrade both products in parallel if you have URLs with commands.
The reason for this change is that some bots (Yandex, Baidu, and others) seem reluctant to index URLs with // before a command string. URLs with /0/, when used by humans, naturally start a new session.
XSD for application-level XML files adds 1 standard module v2.182
The new date for the XSD for WebHubAppConfiguration is 201301. The complete url is http://static.webhub.com/xsd/cv004/WebHubAppConfiguration201301.xsd
The new module is 'lingvo' with source in whdm_Lingvo.pas. The webaction named waLingvo has been moved to this unit.
waLingvo.Execute|ISO639-1 will send the shortest (2char) equivalent for the guestlingvo. This is useful when using 3char lingvo codes.
Use ISO639-1 codes for html tag. Reference: HTML5 at w3.org
See WebHubDemos project for examples.
XSD for application-level XML files adds whdbGrid family support v2.183
The new date for the XSD for WebHubAppConfiguration is 201301b. The complete url is http://static.webhub.com/xsd/cv004/WebHubAppConfiguration201301b.xsd
HotLabelTag, HotFieldTag v2.186
These constants are in the wdbGrid unit
Last WebHub for Delphi 2009 v2.183
WebHub v2.183 is the last version to support Delphi 2009. This enables WebHub to take advantage of the IProviderSupport interface introduced in the Embarcadero DB.pas unit in Delphi 2010.
Recommend upgrade to Delphi XE3 update 1.
IndexOrder v2.184
The IndexOrder feature is NOT supported in v2.184/v3.184 and is on-hold until further notice.
If your application-level config (XML) file contains any IndexOrder lines, please discuss with Tech Support at https://www.href.com/techhelp
COM command no longer included in TwhApplication v2.184
If your application requires a Windows COM interface, please copy the commented-out code from htWebApp.pas for ProcessComCommand into your own custom application object or custom webaction.
Sample datamodule has Init function v2.184
For easier integration with TtpProject, the whsample_DMInit.pas datamodule had its Init procedure switched to a function.
{ Public declarations }
function Init(out ErrorText: string): Boolean;
The return value can be used within TtpProject.OnDataModulesInit:
procedure TDMProjectSample.ProjMgrDataModulesInit(Sender: TtpProject;
  var ErrorText: string; var Continue: Boolean);
  Continue := MyDataModule.Init(ErrorText);
Unit renamed: wbdeForm to wdbForm v2.184
BDE dependency has been removed.
Border property has been removed. Table HTML is generated with id and class attributes so that style can be controlled easily with CSS.
OnHeader, OnFooter, OnField events have been improved. OnSkipField event has been added.
See whDPrefix demo for example usage.
WebDataSource for pure TDataSet added v2.184
Unit wdbSource.pas; class TwhdbSource
If your database provider supports TDataSet then you should be able to use TwhdbSource in place of TwhbdeSource in all cases.
If you were using TADOQuery with the DBExpress variation of TwhdbxSource, and when you compile you get an error about TClientDataSet not being compatible, you should change the type of your webdatasource from TwhdbxSource to TwhdbSource, and change your uses clause to reference unit wdbSource.
New Command: Code64String v2.184
Use this to base64 encode values from WebHub-HTML.
Syntax in WHTEKO: Code64String|expr
Source: htWebApp.pas, ucBase64.pas
TwhdbForm improved v2.184
Now possible to prevent editing of wrong record when locate fails within custom OnSetCommand handler, by setting public boolean property LocateResult to False.
This unit has been substantially altered. If your project uses wdbForm, please test carefully.
The whInstantForm demo is online and working at http://more.demos.href.com/htfm.
New syntax: webdataform.execute|{view|edit}[|primarykey] with the url command being webdataform.keyvalue i.e. the mode view/edit is passed in WHTEKO for security reasons.
TwhdbForm improved v2.186
Minor fix, relevant when using custom OnSetCommand and OnExecute to locate the record prior to view/edit.
Reference DPR demo for example usage.
FIELD command supports optional format string parameter v2.184
See IwhdbGetFieldProperty in webLink.pas and ProcessFieldCommand in htWebApp.pas. Implementation is in derived classes, typically on the webdatasource.
Currency fields are sent with 2 decimal places by default in TwhdbSource.GetFieldProperty using Delphi CurrToStrF function. Previously currency was only processed separately in the BDE webdatasource.
Example: FIELD|wdstest|RegistrationDate|dd-MMM-yyyy
Arrangement is obsolete v2.184
WebDataSource previously had a feature called Arrangement which was a combination of IndexOrder and DisplaySet. This was used with BDE TTable and is no longer supported.
TwhdbScan gives Redraw button a name attribute v2.182
Scan and grid components now provide a name attribute for the Redraw button which lets the surfer change the PageHeight.
See db.demos.href.com/fire demo for an example of overriding the default Redraw button.
See db.demos.href.com/scan demo for an example where the default Redraw button includes the name, "BrowseScanRedrawBtn" automatically.
New: DynUrl.W property v2.182
W stands for WebHub-Delimiter-in-URL and can be either a colon or a forward slash.
ProcessInputSelectCommand logs error when invalid IsMultiple keyword used v2.182
Valid boolean keywords are yes/no and true/false
BDE cleanup v2.184
wbdePost.pas with TwhbdePoster component is obsolete and no longer shipping.
You can use DBExpress components to get to Paradox and dBase tables if necessary. See wdbxPost.pas.
TtpUpdate component class enhanded. v2.184
See DoUpdateCx, NotificationCx, DoDestroyCx in updateOk.pas; used in wdbxPost.pas and wdbScan.pas.
This makes it easier for all TPACK and WebHub components to implement the feature where properties are hooked up automatically in the IDE or at runtime.
Source: updateOK.pas
TwhdbLink obsolete. Replaced with Interface IWebDataSourceLink. v2.184
This enables TwhScan and related components that require a WebDataSource to use shared code on a base class.
Source: wdbLink.pas
If you are using the BDE variation of WebDataSource and you want to access DataSet or RecordCount properties, use grid.WebDataSourceBDE.DataSet.
This area is likely to change again in the near future. (January 2013)
TwhdbxSource and TwhbdeSource derive from TwhdbSource v2.184
In general, any custom webdatasource components that use TDataSet can now derive from TwhdbSource and therefore need to implement far less custom code.
Anyone using a database access layer that supports TCustomClientDataSet can use TwhdbxSource. In spite of the name having dbx, there is no requirement to use DBExpress per se.
OnGetPageHeight event added v2.184
Source: webScan.pas, wdbScan.pas
wdbIBObjNSource.pas will be phased out. v2.184
Long ago it was moderately attractive to use WebHub grid and scan components with the native IBObjects components, those whose classes start with TIB_* such as TIB_Query. This is a nuisance in terms of object hierarchy because they do not descend from TDataSet. Now, it is much more practical to use the TIBO* components such as TIBOQuery. These do descend from TDataSet.
As a general rule going forward, the WebHub grid and scan components will only support database access components that derive from TDataSet and therefore implement IProviderSupport(NG). This is true for the vast majority of third party components plus Embarcadero TClientDataSet and TSimpleDataSet.
Projects that use wdbIBObjOSource.pas should continue to do so; no changes there.
WebDataSource improvements v2.184
New event on WebDataSource: OnAfterClose. Use this for logging/developing/debugging, to find out exactly when the webdatasource closes.
The select lists for DisplaySet and IndexOrder include customizable prompts and default HTML id and class tags.
TwhbdeSourceIBO renamed TwhdbSourceIBO v2.186
The name of this class now correctly reflects the fact that there is NO BDE dependency (Data.DBTables) when using TIBOQuery. There is a TDataSet dependency (Data.DB unit) and that is not a problem.
If your project uses unit wdbIBObjOSource then search *.pas and *.dfm, replacing the indicated classname.
wdbIBObjNSource.pas is obsolete v2.186
In this release, the wdbIBObjNSource unit is shipping with TXT rather than PAS extension.
Developers should instead use TwhdbSource or TwhdbSourceIBO for their web data source.
New command: SetHttpStatus v2.184
Syntax: SetHttpStatus|statuscode|statusdesc
Example: SetHttpStatus|410|deleted
This sets two properties on the Response object. Use this to provide 404 and 410 responses for missing, invalid or deleted pages so that search engines remove such pages from their index.
Source: webapp.pas
TwhBadPageIDEvent v2.184
OnBadPageID event handlers need a minor adjustment. The Sender is now TwhConnection, which uses webCall unit. An extra parameter is passed (second): const ADesiredPageID: string.
Example usage is in whsample_DWSecurity.pas
OnSendBufferedString event available on TwhApplication v2.184
Previously this event was on the BDE web application object.
Example usage is in the whLoadFromDB demo.
New unit: whutil_ValidDate.pas v2.185
Routines in this unit use regular expressions to translate string expressions to TDateTime, for example, NNTP date format per https://tools.ietf.org/html/rfc3977, section
Functions Latin1String, UnicodeToAnsiCodePage, AnsiCodePageToUnicode moved from ucAnsiUtil to ucString v2.186
Contrast with WideStrUtils by Embarcadero
PriorScheme property added to TwhSession v2.186
Use this property to find out when surfer changes scheme between http and https, and therefore has a blank referer.
RejectSession bounces to /0/ when WebHub URL delimiter is / v2.186
Previously, RejectSessions bounced to // or :: depending on the delimiter.
Source: webCore.pas
JSON type added for AJAX pages v2.187
proJSON // uses webPrologue
Major fix re OnBadIP v2.187
Setting bContinue to False did NOT halt execution of the page. OnBadBrowser could fire immediately after OnBadIP.
Fixed function WebAppBadIP in unit whsample_EvtHandlers; the call to ExtractParentDomain was correct for .com domains but the + '.' logic was wrong.
For more detail, see OnBadIP in the online documentation.
webScan.pas small fix v2.187
GetButtons property had been raising an access violation when Response was nil in Delphi IDE
TtpSharedBuf has new GlobalUTF8String property v2.187
Use this instead of GlobalAnsiString when appropriate.
IPC between Hub, WebHubAdmin, ShutdownWHApps, etc. use GlobalUTF8String v2.187
Use the same version for all utilities.
Service Description non-blank v2.187
If you provide a description for your EXE via version properties, and compile without -DPreventSvcMgr, then when the EXE is installed as a service, the description will be used and will show within the list of Windows Services.
Source: MultiTypeAppSvc.pas
New TPack units v2.188
ucHttps: get and post via HTTPS using Indy
ucGoogleAPICredentials: ZaphodsMap lookup of credentials for use of GoogleAPI
tpGoogle_ServiceResource: very-tentative-interface from Delphi to GoogleAPI OAuth2 and more
Optionally send extra details when logging page errors v2.188
If you have warnings in the application-level LOG file and the PageID given is insufficient to help you track down the problem, probably because you use one PageID as a template for many effects, this feature is for you.
The pWebApp.Debug object has a new property OnBeforeSendPageErrors: TwhAppDebugLogEvent. You can use that to log any additional clues you need, such as by calling LogSendInfo('templateid', pWebApp.StringVar['templateID']); // uses ucCodeSiteInterface
WebDataScan logging when query returns 0 records v2.188
If WebDataSource.ValidateConfig is True, which it should be during development/troubleshooting, then the Scan component will log details if the (cloned) query returns 0 records.
Default is False.
WebDataScan first/last buttons v2.188
Two new published boolean properties (FirstPage and LastPage) enable you to construct a droplet which enables or disables links to the First+Prior or Next+Last pages depending on whether the surfer is already there.
See the whFirebird demo, revision 1725, for usage. Test starting at http://db.demos.href.com/eng/fire:pgReadonly3
Added PctEncodeWWWForm2005 to ucUrlEncode.pas v2.188
This routine conforms precisely to the spec that https://en.wikipedia.org/wiki/Percent-encoding says was finalized in 2005.
webAjax unit usage changed v2.188
The webAjax unit makes sense for use with the Prototype library. It is not required for use with JQuery.
The JS command now supports only the ScriptTag parameter. Example: JS|ScriptTag|src=""
If you want to use the AjaxEvent syntax, see whsample_PrototypeJS.pas, included in is in v2.189.
Source reference: webApp.pas
webVars patched for situation where VAR stream is invalid v2.188
Some rare situations can cause session VAR file contents to be invalid. The exception was masked unless a tool like EurekaLog was used to surface the call stack. The symptom was that the surfer did not receive a page response and the app hung.
The patched webVars unit changes this as follows: the VAR file is renamed (saved for subsequent analysis) and as a result, the surfer proceeds with a brand new session. While this is far from ideal, it is better than hanging the app.
Renamed files will remain in the session var folder and will have an extension of save_bad_vr. Please send any such files to tech support.
TwhBasicSession.SaveStates logs details if compiled with -DCodeSite;LOGVAR.
In addition, CompHLA support has been removed from webVars.pas; unused TwhBasicSessionOptions types have been removed; FCentralInfo removed; use of pWebApp changed to FWebApp.
TwhBasicSession.SaveStates anticipates that FWebApp.CentralInfo.WebOpenActionsEx could be a nonsense pointer. Catching this particular error prevents the app object from hanging mid-request.
NB: the removal of FCentralInfo fixes the following errors within the old-ipc Hub: access violations when trying to access WebOpenActionsEx list during first request; access violations on exit.
wdbSSrc catches exceptions during streaming of save-state v2.188
Look for details in the error log file for the app.
D17 component DCUs built with Delphi XE3 update 2 v2.188
Delphi Update 2 is recommended for anyone using XE3. Obtain it from cc.embarcadero.com under "My Registered Downloads."
Delphi XE4 support v2.188
WebHub v2.188/3.188 is the first to support Delphi XE4.
New unit: whsample_PrototypeJS.pas v3.189
This unit is for people using the JavaScript Prototype library rather than JQuery.
ucCodeSiteInterface extended v3.189
Added: CSEnterMethod, CSExitMethod. These are primarily for use within WebHub code units. They make it possible for core code to send logging details for those developers who compile with -DCodeSite.
Added logging of potential syntax problems v3.189
All of these features apply only if the app was compiled with -DCodeSite.
Refresh errors are now reported to the CodeSite Log.
Any PageIDs longer than 35 can not be called as WebHub pages using new-ipc, and those PageIDs are now flagged as RefreshErrors.
Surfer requests for invalid (aka "bad") PageIDs are logged as warnings.
ucShell: WinExecutableName function erased v3.189

The Hub, WebHubAdmin, ZMAdmin

Setup manifest requests admin permissions v2.180
Setup works Windows with UAC enabled. The manifest for this Setup program now requests admin privileges. The operations requiring elevated permission include setting the ZaphodsMap environment variable, installing the hub service and starting the hub service.
Hub works in more corner-cases such as install/uninstall with invalid license or with invalid ZaphodsMap env var.
XSD for WHNetworkInfo.xml adds 1 field v2.182
The new date for the XSD for WHNetworkInfo is 201212. The complete url is http://static.webhub.com/xsd/cv004/WebHubNetworkInfo201212.xsd
The new field is RequestValidation.
Short session numbers v3.184
The new-ipc Hub now considers SessionDigits to mean both "at least" and "at most" that number of digits. It had been ignoring the configured value. No change to old-ipc Hub.
Under Lite and Evaluation licenses, the Hub nonetheless still intentionally ignores the configured number of session digits.
XSD for WHCentralInfo.xml adds 1 field v2.184
The new date for the XSD for WHCentralInfo is 201302. The complete url is http://static.webhub.com/xsd/cv004/WebHubCentralInfo201302.xsd
The new field is SessionMaxActive.
SessionMaxActive v2.185
This feature enables you to throttle the number of surfers allowed on a per-machine basis. It is supported in v2.185 and v3.185. It requires both the runner and the Hub; it can work with older custom WebHub applications.
A value of 0 means unlimited surfers. This is the default.
Surfers who arrive after the maximum number of sessions has been reached will be bounced to /sorry/webapps-too-busy.html This means that currently-active sessions can continue, presumably to complete some transaction, and as they Logout, new surfers will be permitted.
Example code for doing a similar thing on a per-app basis, i.e. within a custom WebHub app, is in the Delphi file whShopping_dmwhSessionWatch.pas in the WebHubDemos project.
Note that you can also use Microsoft IIS to restrict the queue of incoming requests at an AppPool level.
WebHub Central Service Description is non-blank v2.187
Install writes RequestValidation node to WHNetworkInfo for new runners v2.188
WebHub Central Service starts automatically v2.188
Upon new install to clean machine.
WebCycle and WebLogin components removed from HubApp v2.188
Old-ipc only; new-ipc never had a HubApp
Auto-Restart if HubApp not found v2.188
Old-ipc only
If a request comes in for the HubAppID and hub-auto-restart.bat is in the same folder as hub.exe, then that BAT will be called.
Documentation: DefaultHubAppID
Timeout on 1st request fixed v2.188
Old-ipc only
There had been a problem where the first request to the Hub (after starting it) would timeout due internal access violations. This has been fixed.
XE4 v2.189
The Hub, WebHubAdmin and runner binaries are compiled with Delphi XE4.
NumberConnectedTotal v2.189
Old-ipc only: the HubApp event that counts the number of connected instances does so more cautiously.
TNativeXml ReadFromUTF8String v2.189
Prior version had an assertion about there being an encoding attribute present in the top xml tag. This version adds that attribute (as UTF-8) if it is not already present.
Source is on http://sourceforge.net/p/zaphodsmap/wiki/Home/
Security fix in WebVars re OnBadIP v2.189
property SessionFirstIP needed to write back via SessionFirstIPReset.
If using StreamCatcher, Administrator should erase the whsession file, 1001.var (the webrobot var file), immediately after upgrade. Other logged-in surfers will be bounced to new session numbers (once) after the upgrade.

WebHub Runners

RequestValidation v2.182
Unless configured to with RequestValidation set to false, the runner will now modify any posting of hex 3C and hex 3E symbols (when they are not definitively NOT-HTML due to surrounding whitespace, etc.) because those lead too easily to script injection. The replacement symbols are moderately human readable: #$25C0 and #$25B6. Source: ucMetaChars.pas
Applications that require surfers to enter HTML or XML tags will need to override the default setting (i.e. set it to False), and then perform custom validation within the application.
Issue with First Request to Runner v3.185
This applies to new-ipc only.
This fixes a problem with the first request to a given runner after iisreset, where that request was for an AppID and the custom WebHub EXE was in fact running, especially on servers where more than one runner would connect to the Hub. The symptom was either error code 45001 or the app would calculate the page (as seen on the output panel) yet the runner would send a timeout response.
Requests for ?r:vers, ?r:version, ?h:vers were working already.
WebHubGuardian: customize interval v2.187
The default interval is 120 seconds. This can now be customized via ZMAdmin. Details are in the online help under WebHubGuardian.
Old-ipc only
Status: runners compiled with FreePascal v2.187
The FPC runners are on-hold pending stable release of FPC 2.7.
In-house testing results with FPC 2.6.2. were as follows: old-ipc isapi for web pages without cookies nor file upload: worked. new-ipc isapi: failed. cgi-bin: untested. DUnit tests: many failures involving UTF8String and UnicodeString, which is understandable with FPC 2.6.2.
Fixed GetSysMessageText8 for all runners v2.187
Notice when new-ipc Hub stops and restarts v3.189
Report X-Situation when Hub unable to schedule; detect when Hub Process ID becomes invalid.
Echo page indicates whether Hub is running v3.189
When testing on the admin authority or localhost, or when testing the runner-compiled-with-CodeSite, the echo response provides extra details included whether the Hub is (known to be) running.
This applies to new-ipc only.