статическое значение в web.config - PullRequest
7 голосов
/ 10 мая 2011

У меня есть проект, работающий на 2 серверах. 1 тестовый сервер с подключением к testDB и один на реальном сервере с реальной БД.

Единственное отличие в каждом из запущенных экземпляров этого проекта - web.config.

То, что я хотел бы сделать, это иметь возможность установить значение в web.config, bool, которое затем может быть прочитано кодом. Это bool будет верно, если приложение находится в режиме тестирования. Я установил бы его вручную, затем проект считал бы его, и, когда это правда, письма, которые приложение отправляло, затем оставались бы внутренними, чтобы люди фактически не получали почту. Я делал это раньше, устанавливая public static bool в global.asax, но в Asp.net MVC все встроено в одну DLL, поэтому я не могу изменить его на развернутом сервере в этом случае.

Возможно ли это? или было бы хорошее другое решение?

Ответы [ 6 ]

18 голосов
/ 10 мая 2011

Как уже говорили другие, для

<configuration>
  <appSettings>
    <add key="isInTestMode" value="true"/>
  </appSettings>
  ...
</configuration>

существует раздел appSettings вашего web.config, к которому можно получить доступ с помощью WebConfigurationManager

bool isInTestMode = Boolean.Parse(WebConfigurationManager.AppSettings["isInTestMode"]);

Однако

Если вы заинтересованы только в том, чтобы не отправлять электронные письма при тестировании, то вы можете использовать web.config для настройки .NET, а не для выгрузки электронных писем в локальный каталог.чем отправить их на почтовый сервер

<system.net>
  <mailSettings>
    <smtp deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="C:\MailDump\" />
      <network host="localhost"/>
    </smtp>
  </mailSettings>
  ...
</system.net>

Это будет работать, если ваш код не переопределяет настройки почтового SMTP-сервера по умолчанию.

3 голосов
/ 10 мая 2011

Да, вы можете:

<configuration>
  <appSettings>
    <add key="TestingMode" value="True" />
  </appSettings>
   ...
</configuration>

Вы можете получить это, используя что-то вроде этого:

static public String GetWebConfigKey(string appSettingsKey)
    {
        String value = "";

        System.Configuration.AppSettingsReader asr = new System.Configuration.AppSettingsReader();

        try
        {
            value = asr.GetValue(appSettingsKey, System.Type.GetType("System.String")).ToString();
        }
        catch (KeyNotFoundException knfe)
        {
            throw new KeyNotFoundException("KeyNotFoundException occured in UtilityLibrary.WebConfig.getWebConfigKey" + knfe.Message);
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

        return value;
    }

Я обычно использую Enum для ключей своего приложения, чтобы они строго печатались, и это облегчает их поиск и ускоряет поиск, а не копает в web.config

2 голосов
/ 10 мая 2011

Почему бы вам не использовать appSettings?

<configuration>
    <appSettings>
        <add key="myValue" value="true"/>
    </appSettings>
        ....
1 голос
/ 10 мая 2011

Вы можете использовать свой Web.Config для этого, используя appSetting (ConfigurationManager.AppSetting ["Key"])

Или, если ваше приложение работает на тестовом сервере в режиме отладки, вы можете сделать это,

 #if (DEBUG)

 //Debug

#else

  //Live

#endif
0 голосов
/ 10 мая 2011

Если вы используете Visual Studio 2010, я бы рекомендовал использовать файлы Transformation для преобразования файла web.config. Чем больше у вас различий, тем больше это вам поможет.

Шаги высокого уровня:

  1. Создание новой конфигурации сборки с помощью диспетчера конфигурации
  2. Установите соответствующие значения в каждом вновь созданном файле конфигурации
  3. Сборка и публикация
  4. Готово и никогда не нужно помнить об изменении значений в нескольких конфигурационных файлах (разработка, подготовка, выпуск и т. Д.).

http://msdn.microsoft.com/en-us/library/dd465318.aspx

0 голосов
/ 10 мая 2011

ASP.Net WebDeploy позволяет автоматически преобразовывать ваш web.config в зависимости от того, куда вы развертываете.Например, он может отправить одну строку подключения при развертывании на тестовом сервере и другую строку подключения при развертывании на работающем сервере.

http://www.iis.net/download/WebDeploy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...