2011-05-10 18 views
6

Mam projekt uruchomiony na 2 serwerach. 1 testserver z połączeniem z testDB i jeden na prawdziwym serwerze z prawdziwym DB.Wartość statyczna w pliku web.config

Jedyną inną rzeczą w każdym uruchomionym wystąpieniu tego projektu jest plik web.config.

Co chciałbym zrobić, to mieć możliwość ustawienia wartości w web.config, bool, który następnie może być odczytany przez kod. Ten bool będzie prawdą, jeśli aplikacja jest w trybie testowym. Ustawiłbym to ręcznie, projekt następnie odczytałby go, a kiedy to prawda, maile, które aplikacja wyśle, będą przechowywane wewnętrznie, więc ludzie nie dostaną poczty. Zrobiłem to wcześniej, ustawiając public static bool w global.asax, ale w Asp.net MVC wszystko jest wbudowane w jedną bibliotekę DLL, więc nie mogę tego zmienić na wdrożonym serwerze.

Czy to możliwe? czy też byłoby fajne inne rozwiązanie?

Odpowiedz

16

Jak mówili inni to co odcinek appSettings swojej sieci.config jest

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

które następnie mogą być dostępne za pomocą WebConfigurationManager

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

Jednak

Jeśli interesuje tylko nie wysyłanie e-maili podczas testowania, a następnie można korzystać z internetu. config do skonfigurowania .NET do zrzucania wiadomości e-mail do lokalnego katalogu, zamiast wysyłania ich do serwera poczty elektronicznej:

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

To zadziała, jeśli twój kod nie zastąpi domyślnych ustawień serwera SMTP poczty.

2

Dlaczego nie używasz appSettings?

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

Program ASP.Net WebDeploy umożliwia automatyczne przekształcanie pliku web.config na podstawie miejsca, w którym jest wdrażany. np. może wysyłać jeden ciąg połączenia podczas wdrażania do serwera testowego i inny ciąg połączenia podczas wdrażania do serwera na żywo.

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

3

Tak można:

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

można dostać się za pomocą mniej więcej tak:

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; 
    } 

I zazwyczaj użyć Enum dla moich kluczy aplikacji, aby zachować je mocno wpisane, co sprawia, że ​​wyszukiwanie i wyszukiwanie jest łatwiejsze niż wyszukiwanie w sieci .config

+0

To złapanie ogólnego wyjątku jest złym przykładem, jak nie łapać wyjątków. Jakie są korzyści? W każdym razie masz wyjątek, tylko ty wiesz o tym mniej ... – Martas

1

można używać web.config to zrobić, używając AppSetting (ConfigurationManager.AppSetting [ „klucz”])

Lub, jeśli yuor aplikacja jest uruchomiona w trybie debugowania na serwerze testowym można to zrobić,

#if (DEBUG) 

//Debug 

#else 

    //Live 

#endif 
0

Jeśli używasz programu Visual Studio 2010, polecam użycie plików transformacji do transformacji pliku web.config. Im więcej masz różnic, tym bardziej to ci pomoże.

Kroki wysoki poziom:

  1. utworzyć nową konfigurację kompilacji poprzez menedżera konfiguracji
  2. Ustaw wartości odpowiednio w każdym nowo utworzonym pliku konfiguracyjnym
  3. tworzenie i publikowanie
  4. Sporządzono i nigdy nie pamiętaj, aby zmieniać wartości w wielu plikach konfiguracyjnych (programowanie, przemieszczanie, edycja itp.).

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

Powiązane problemy