IBM Support

Intermittent "The ConnectionString property has not been initialized" errors when using Controller 10.3.1 (or later)

Troubleshooting


Problem

User performs actions inside Controller. From time to time (occasionally / intermittently) the user receives an error message.

The exact error message will vary (depending on what the end user is doing), but it will include the phrase "The ConnectionString property has not been initialized".

Symptom

cid:image001.png@01D3F2A0.E480ECE0
Server was unable to process request
The ConnectionString property has not been initialized

Cause

There are several known potential causes for this 'The ConnectionString property has not been initialized' error.

  • For more examples, see separate IBM Technote #1963432.

This Technote relates to the scenario where the customer is using a modern version of Controller (for example 10.3.1/10.4.0/10.4.1/10.4.2) therefore is not suffering from the known bugs in older versions of Controller (which can cause the problem).

In this scenario, the cause is a limitation of the third-party (Microsoft) IIS component, used by the Controller architecture. This limitation is triggered by the default settings for the IIS application pool recycle:

Environment

Controller 10.3.1/10.4.0/10.4.1/10.4.2 or later.

Diagnosing The Problem

On the Controller application server, open Microsoft Event Viewer. Inside the 'System Log', there may be a 'WAS' or 'Microsoft-Windows-WAS' event at a similar time to when the users reported the issue.
 
It will look similar to this:

  • A worker process with process id of '1940' serving application pool '.NET v4.5' has requested a recycle because the worker process reached its allowed processing time limit.

Resolving The Problem

Long-term Fix

Modify the relevant IIS application pool's recycle settings, so that it does not recycle when users are using the system.

  • Below are two methods to achieve this.

Method #1 (recommended)

Configure the application pool (mentioned inside the Event Viewer 'System' log) to NEVER recycle.

  • Instead, perform a regular (scheduled) IISRESET (which will clear all webserver processes/memory completely) during a regular downtime period (for example every Sunday morning at 3am).


Steps:

The following changes can be made at any time (no need for downtime).

1. Logon to the Controller application server

2. From the Start menu, open 'Administrative Tools' and launch "Internet Information Services (IIS) Manager"

3. Navigate to the 'Application Pools' section

4. Make a note of any application pool which has 'Applications' set to be more than zero

  • For example, in the below example the server has two application pools (".NET v4.5" and "DefaultAppPool") which have 'Applications' set to '1'

5. Right-click on the first relevant entry (for example '.NET v4.5') and click "View Applications"


6. Look to see if it mentions 'controllerserver' and 'ControllerProxyServer'

  • For example, below shows an example where these are mentioned (inside the pool called '.NET v4.5'):

If your application pool has an entry similar to the one above, then this is the relevant application pool that we change

=> Skip to step 8.

7. Repeat step 6 until you find the application pool which contains an entry for 'controllerserver' and 'ControllerProxyServer'

8. Open 'Application Pools' again

9. Right-click on the pool that we found earlier (for example '.NET v4.5') and choose 'Recycling...':


10. Untick *all* the boxes so that it looks similar to:



11. Click "Next", "Finish".

12. Create a Windows 'Scheduled Task' (on that same application server) to run the following command: IISRESET

  • Configure this to only run during a period of downtime (because it will cause disconnections for users)
  • For example, perhaps run it every Sunday morning at 3am.
  • See below for more information on this.


================================

Steps to create a Windows 'Scheduled Task' to run IISRESET:
The following steps are based on Windows 2012. They may need to be modified slightly depending on your environment:

1. Decide on a regular time for (bried) downtime

  • For example, every Sunday morning at 3am


NOTE: The amount of downtime will be very small. Typically an IISRESET will only take a few seconds to complete.

2. Logon to the Controller application server

3. Right-click on 'Start' and click "Command Prompt (Admin)"

4. Type in a command similar to:

  • schtasks.exe /create /ru "SYSTEM" /SC WEEKLY /D SUN /ST 03:00 /TN "IISRESET for Cognos Controller" /TR "c:\windows\system32\iisreset.exe"


Make sure there is a success, similar to:


5. Click "Start - Administrative Tools - Task Scheduler"
6. Make sure that the relevant task appears as expected, for example:



7. At a a later date (for example the following Monday) check that the task ran successfully.

  • For example, look inside 'Event Viewer', inside the 'System' log, for entries similar to the following:


================================

Method #2 (alternative method - not recommended because other issues can still occur)

Modify the relevant IIS application pool to recycle during a 'quiet' period (the fewest possible users on the system).

- However, be aware that there are rare (but known) issues which can occur with these settings

- See separate IBM Technote# 2017087 for more details of one example of the type of issue that can still occur if you use this method.

Steps:

The following changes can be made at any time (no need for downtime).

1. Logon to the Controller application server

2. From the Start menu, open 'Administrative Tools' and launch "Internet Information Services (IIS) Manager"

3. Navigate to the 'Application Pools' section

4. Make a note of any application pool which has 'Applications' set to be more than zero

  • For example, in the below example the server has two application pools (".NET v4.5r" and "DefaultAppPool") which have 'Applications' set to '1'

5. Right-click on the first relevant entry (for example '.NET v4.5') and click "View Applications"


6. Look to see if it mentions 'controllerserver' and 'ControllerProxyServer'

  • For example, below shows an example where these are mentioned (inside the pool called '.NET v4.5'):

If your application pool has an entry similar to the one above, then this is the relevant application pool that we change

=> Skip to step 8.

7. Repeat step 6 until you find the application pool which contains an entry for 'controllerserver' and 'ControllerProxyServer'

8. Open 'Application Pools' again

9. Right-click on the pool that we found earlier (for example '.NET v4.5') and choose 'Recycling...':


10. Modify the settings so that it looks similar to:




In other words:

  • UNTICK 'Regular time intervals'
  • TICK 'Specific times', and choose a time when fewest users are using the system (for example 5 in the morning, in the example above).

11. Click 'Next'

12. Make sure that all the available options are ticked, for example:




13. Click "Finish".

  

-------------------------------------------------------------------------------------------------------------
Workaround (instant cure)
Reset the web server, by running: IISRESET.
Steps:
1. Logon to the Controller application server
2. Launch a command prompt:
  • Click "Start - Run" and then type in: CMD)
3. Type the following command: IISRESET
image 4288
-------------------------------------------------------------------------------------------------------------

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SS9S6B","label":"IBM Cognos Controller"},"ARM Category":[{"code":"a8m50000000KzLjAAK","label":"Logon Issues"}],"ARM Case Number":"","Platform":[{"code":"PF033","label":"Windows"}],"Version":"10.3.1;10.4.x","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
16 June 2020

UID

swg22016839