InstallPortal
CaseTalk Portal
The entire portal software is controlled with a ISAPI dll, static files and a database configuration. The portal may be downloaded from the website as CaseTalkPortal.zip.
Unpacking
Once the portal software is extracted from the zip file and copy those to the c:\inetpub\wwwroot folder. The folder structure should resembled the above.
c:\inetpub\wwwroot\
portal\
dist\
ftp\
msodbcdiag17.dll
msodbcsql17.dll
msodbcsqlr17.dll
Portal_Isapi.dll
Portal_Isapi.ini
web.config
IIS Prerequisites
- IIS needs to contain the ISAPI feature.
- VC_Redist.x86 (from the free download section)
Portal Files
To install the portal in IIS, follow the steps below:
- Create a Application Pool called CaseTalkPortal which has No Managed Code and Classic pipeline mode.
- Make sure the CaseTalkPortal pool has the advanced settings set to Enable 32 bit applications.
- Under the Default Website add an Application which is hooked to the CaseTalkPortal Application, and points to the physical folder portal\.
- Once CaseTalk Manager is run successful, copy the CaseTalkManager.ini from the roaming profile folder into Portal_Isapi.ini for proper database connection configuration.
- In the portal_isapi.ini add the line "homepage=\myportal" to the settings-section. This is used to navigate users to the proper startpage when clicking the Home. Please adjust to your appropriate setup.
- To customize the introduction- and about-tab, please read the section at the bottom of this page.
IIS Configuration
- Website Handler Mappings: Configure the ISAPI-dll to point to the portal_isapi.dll, and make sure it is executable. This is done through properties and feature permissions.
- ISAPI and CGI Restrictions of the webserver: Add the portal_isapi.dll to the list and make sure it is allowed to be executed.
- Website Default Document: Add the portal_isapi.dll as a default document name.
IIS Caching
Do not enable IIS output caching for the portal. The portal is a single dynamic endpoint that routes every page through query-string parameters (ajax, format, data, schema, content, favicon.ico, ...). An output-cache profile with varyByQueryString collapses every parameter that is not in the vary list into one cache slot: whichever response is requested first (usually the favicon image) is then replayed for the home page, the entity tabs and the table data for the duration of the cache. The visible symptom is tabs or the home page showing raw PNG bytes (PNG IHDR ...) instead of content. Kernel-mode caching cannot vary by query string at all.
Earlier versions of this page recommended a CacheForTimePeriod profile — if your web.config still contains one, remove it. The portal sends its own Cache-Control headers (pages are not cacheable, icons and static files are), so browsers still cache safely without IIS response caching.
A complete web.config for the portal application:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Static assets: let the browser cache them for 30 minutes -->
<location path="dist">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:30:00" />
</staticContent>
</system.webServer>
</location>
<system.webServer>
<!-- CRITICAL: never let IIS cache portal responses (see above) -->
<caching enabled="false" enableKernelCache="false" />
<handlers accessPolicy="Script, Read, Execute">
<remove name="ISAPI-dll" />
<add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule"
scriptProcessor="Portal_Isapi.dll" resourceType="File"
requireAccess="Execute" allowPathInfo="true"
preCondition="bitness32" responseBufferLimit="0" />
</handlers>
<defaultDocument>
<files>
<clear />
<add value="Portal_Isapi.dll" />
</files>
</defaultDocument>
<security>
<requestFiltering>
<!-- 30 MB upload ceiling; long names travel in query strings -->
<requestLimits maxAllowedContentLength="30000000"
maxQueryString="8192" maxUrl="8192" />
</requestFiltering>
</security>
<!-- Let the portal's own error pages reach the browser -->
<httpErrors existingResponse="PassThrough" />
<!-- Dynamic compression can truncate ISAPI responses; keep it off -->
<urlCompression doStaticCompression="true" doDynamicCompression="false" />
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Customization
The file Portal_isapi.ini contains a few lines for database configuration and a more generic section.
[Settings] Homepage=/ introduction=/ftp/introduction.html about=/ftp/about.html logfolder=c:\inetpub\logs\CaseTalkPortal
The introduction and about lines allow customization of the portal glossary home page by injecting a specially crafted html file to be presented inside the introduction and about tabs.
The logfolder line specifies where the portal writes its log files. Each start of the portal opens a new time-stamped log file, and files older than 30 days are purged automatically. If the setting is empty or absent, a Logs subfolder next to the DLL is used (with the system temp folder as fallback). Make sure the application pool identity has write permission on the folder.
See Also
- Portal IIS Configuration — troubleshooting guide for compression, caching, buffering, and application pool recycling settings