private ConfigurationKeyValues refreshBSL(out ConfigurationKeyValues thisOldbusinessServiceKey, string fieldName, ServiceUsers csUser)
 {
     Trade.StockTraderWebApplicationConfigurationImplementation.ConfigurationService configService = new ConfigurationService();
     List<TraverseNode> traversePath;
     ConfigurationKeyValues businessServiceKey = new ConfigurationKeyValues();
     businessServiceKey.ConfigurationKeyFieldName = fieldName;
     businessServiceKey.OriginatingConfigServiceName = StockTraderUtility.BUSINESS_SERVICES_CONFIG;
     traversePath = configService.getTraversePath(null, Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, csUser);
     businessServiceKey = configService.getServiceConfigurationKey(Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, businessServiceKey.ConfigurationKeyFieldName, traversePath, csUser);
     thisOldbusinessServiceKey = businessServiceKey;
     return businessServiceKey;
 }
        /// <summary>
        /// Overrides the base method, performs app-specific logic on specific app-specific setting changes.  For the
        /// Web app there are few app specific routines we need to run when OPS-specific app settings are changed in the repository.
        /// MAKE SURE TO CALL THE BASE checkChangedSetting method FIRST!
        /// </summary>
        /// <param name="settingsInstance">Instance of this host's Settings class.</param>
        /// <param name="updatedConfigurationKey">The key that has been updated.</param>
        /// <param name="block">True to block on any multi-threaded calls, typically the node receiving via
        /// Config Service endpoint blocks, nodes receiving via Node Service do not, if any threads are spun up.</param>
        /// <returns>bool as success code.</returns>
        public override bool checkChangedSetting(object settingsInstance, ConfigurationKeyValues updatedConfigurationKey,bool block,ServiceUsers csUser)
        {
            bool success = false;
            Trade.StockTraderWebApplicationConfigurationImplementation.ConfigurationService configService = new ConfigurationService();
            ServiceConfigHelper configHelper = new ServiceConfigHelper(settingsInstance);
            success = base.checkChangedSetting(settingsInstance, updatedConfigurationKey, block, csUser);
            if (success)
            {
                  switch (updatedConfigurationKey.ConfigurationKeyFieldName)
                  {
                      case "ACCESS_MODE":
                          {
                              setAccessMode(updatedConfigurationKey.ConfigurationKeyValue);
                              ConfigurationKeyValues businessServiceKey = new ConfigurationKeyValues();
                              switch (Settings.ACCESS_MODE)
                              {
                                  
                                  case StockTraderUtility.BSL_IISHOST_BSL_HTTP:
                                      {
                                          if (block)
                                          {
                                              businessServiceKey.ConfigurationKeyFieldName = "REFRESHCONFIG";
                                              businessServiceKey.ConfigurationKeyValue = "RefreshConfig";
                                              businessServiceKey.OriginatingConfigServiceName = StockTraderUtility.BUSINESS_SERVICES_CONFIG;
                                              refreshBSLConfig(businessServiceKey, configService, block, csUser);
                                          }
                                          InitCommunicationChannels(settingsInstance, null, ConfigUtility.INIT_ALL_CONNECTED_INSTANCES);
                                          break;
                                      }

                                  case StockTraderUtility.BSL_IISHOST_BSL_TCP:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_IISHOST_TCP_TMSEC_CLIENTCERT:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_IISHOST_TCP_TMSEC_USERNAME:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_IISHOST_WSHTTP_MSEC_CLIENTCERT:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_IISHOST_WSHTTP_TMSEC_CLIENTCERT:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }
                                  case StockTraderUtility.BSL_IISHOST_WSHTTP_TMSEC_USERNAME:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_AZURE_TCP_TMSEC_CLIENTCERT:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_AZURE_TCP_TMSEC_USERNAME:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_AZURE_WSHTTP_TMSEC_CLIENTCERT:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }

                                  case StockTraderUtility.BSL_AZURE_WSHTTP_TMSEC_USERNAME:
                                      {
                                          goto case StockTraderUtility.BSL_IISHOST_BSL_HTTP;
                                      }
                                 
                                  case StockTraderUtility.BSL_INPROCESS:
                                      {
                                          InitConfigInProcessBusinessService.initConfigBusinessService(ConfigUtility.masterServiceWebHostSyncObject,true);
                                          break;
                                      }

                                  default:
                                      {
                                          break;
                                      }
                                  }
                                  success = true;
                                  break;
                              }

                          case "MAX_DISPLAY_ORDERS":
                          {
                              List<TraverseNode> traversePath=null;
                              int successBSL = ConfigUtility.CLUSTER_UPDATE_FULL_SUCCESS;
                              if (Settings.ACCESS_MODE == StockTraderUtility.BSL_SOAP)
                              {
                                  success = true;
                                  break;
                              }
                              ConfigurationKeyValues businessServiceKey = null;
                              ConfigurationKeyValues thisOldbusinessServiceKey = null;
                              businessServiceKey = refreshBSL(out thisOldbusinessServiceKey, "MAX_QUERY_ORDERS", csUser);
                              if (businessServiceKey != null && block)
                              {
                                  businessServiceKey.ConfigurationKeyValue = updatedConfigurationKey.ConfigurationKeyValue;
                                  traversePath = configService.getTraversePath(null, Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, csUser);
                                  successBSL = configService.receiveConfigurationKey(Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER,StockTraderUtility.BUSINESS_SERVICES_CONFIG, thisOldbusinessServiceKey,businessServiceKey,block, ConfigUtility.UPDATE_KEY_VALUE,traversePath,csUser);
                                  if (successBSL == ConfigUtility.CLUSTER_UPDATE_FULL_SUCCESS)
                                      success = true;
                              }
                              else
                                  success = false;
                              break;
                          }

                      case "MAX_DISPLAY_TOP_ORDERS":
                          {
                              List<TraverseNode> traversePath = null;
                              int successBSL = ConfigUtility.CLUSTER_UPDATE_FULL_SUCCESS;
                              if (Settings.ACCESS_MODE == StockTraderUtility.BSL_SOAP)
                              {
                                  success = true;
                                  break;
                              }
                              ConfigurationKeyValues businessServiceKey = null;
                              ConfigurationKeyValues thisOldbusinessServiceKey = null;
                              businessServiceKey = refreshBSL(out thisOldbusinessServiceKey, "MAX_QUERY_TOP_ORDERS", csUser);
                              if (businessServiceKey != null && block)
                              {
                                  businessServiceKey.ConfigurationKeyValue = updatedConfigurationKey.ConfigurationKeyValue;
                                  traversePath = configService.getTraversePath(null, Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, csUser);
                                  successBSL = configService.receiveConfigurationKey(Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, thisOldbusinessServiceKey, businessServiceKey, block, ConfigUtility.UPDATE_KEY_VALUE, traversePath, csUser);
                                  if (successBSL == ConfigUtility.CLUSTER_UPDATE_FULL_SUCCESS)
                                      success = true;
                              }
                              else
                                  success = false;
                              break;
                          }


                      default:
                          {
                              success = true;
                              break;
                          }
                  }
              }
              return success;
        }
 /// <summary>
 /// Refreshes the BSL from repository.
 /// </summary>
 /// <param name="key"></param>
 /// <param name="configService"></param>
 /// <param name="notifyNodes"></param>
 /// <param name="csUser"></param>
 /// <returns></returns>
 public int refreshBSLConfig(ConfigurationKeyValues key, ConfigurationService configService, bool notifyNodes,ServiceUsers csUser)
 {
     int returnCode = ConfigUtility.CLUSTER_UPDATE_FULL_SUCCESS;
     string value = key.ConfigurationKeyValue;
     List<TraverseNode> traversePath = configService.getTraversePath(null, Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, csUser);
     key = configService.getServiceConfigurationKey(Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, key.ConfigurationKeyFieldName, traversePath, csUser);
     if (key != null)
     {
         key.ConfigurationKeyValue = value;
         traversePath = configService.getTraversePath(null, Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, csUser);
         if (traversePath!=null)
             returnCode = configService.receiveConfigurationKey(Settings.BSL_CLIENT_ACTIVE_SERVICE_HOST_IDENTIFIER, StockTraderUtility.BUSINESS_SERVICES_CONFIG, key, key, notifyNodes, ConfigUtility.UPDATE_KEY_VALUE, traversePath, csUser);
     }
     return returnCode;
 }