2011-05-10 36 views
6

Tôi có một dự án đang chạy trên 2 máy chủ. 1 testserver với một kết nối đến một testDB, và một trên máy chủ thực, với DB thực.giá trị tĩnh trong web.config

Điều duy nhất khác nhau trong mỗi trường hợp đang chạy của dự án này là web.config.

Điều tôi muốn làm là có khả năng đặt giá trị trong web.config, một bool, sau đó có thể được đọc bởi mã. Bool này sẽ là đúng nếu ứng dụng đang ở chế độ thử nghiệm. Tôi đã thiết lập nó theo cách thủ công, dự án sau đó sẽ đọc nó ra, và khi đó là sự thật, các thư ứng dụng sẽ gửi, sau đó sẽ được giữ bên trong, vì vậy mọi người không thực sự nhận được thư. Tôi đã làm điều này trước khi với thiết lập một public static bool trong global.asax nhưng trong Asp.net MVC tất cả mọi thứ được xây dựng thành một DLL, vì vậy tôi không thể thay đổi nó trên máy chủ được triển khai trong trường hợp đó.

Điều này có khả thi không? hoặc sẽ có một giải pháp tốt đẹp khác?

Trả lời

16

Như những người khác đã nói đây là những gì appSettings phần của trang web của bạn.cấu hình là cho

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

nào sau đó có thể được truy cập bằng cách sử dụng WebConfigurationManager

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

Tuy nhiên

Nếu bạn chỉ quan tâm đến việc không gửi email khi kiểm tra, sau đó bạn có thể sử dụng web. cấu hình để cấu hình .NET để kết xuất email vào thư mục cục bộ thay vì gửi chúng đến máy chủ thư

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

Điều này sẽ hoạt động nếu mã của bạn không ghi đè cài đặt máy chủ SMTP thư mặc định.

2

Tại sao bạn không sử dụng appSettings?

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

ASP.Net WebDeploy cho phép bạn tự động chuyển đổi web.config dựa trên nơi bạn đang triển khai. ví dụ: nó có thể gửi một chuỗi kết nối khi triển khai tới máy chủ thử nghiệm và một chuỗi kết nối khác khi triển khai đến máy chủ trực tiếp.

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

3

Có bạn có thể:

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

Bạn có thể lấy nó ra sử dụng một cái gì đó như thế này:

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

tôi thường sử dụng một Enum cho các phím ứng dụng của tôi để giữ cho chúng mạnh mẽ gõ và nó làm cho họ nhanh hơn và dễ dàng hơn để tra cứu hơn là đào thông qua web.config

+0

Việc bắt ngoại lệ chung là ví dụ không tốt, cách không bắt ngoại lệ. Lợi ích của nó là gì? Bạn có ngoại lệ anyway, chỉ có bạn biết ít hơn về nó ... – Martas

1

Bạn có thể sử dụng Web.Config của bạn để làm điều này, sử dụng appSetting (ConfigurationManager.AppSetting [ "Key"])

Hoặc, nếu ứng dụng yuor đang chạy trong chế độ gỡ lỗi trên máy chủ thử nghiệm bạn có thể thực hiện điều này,

#if (DEBUG) 

//Debug 

#else 

    //Live 

#endif 
0

Nếu bạn đang sử dụng Visual Studio 2010, tôi khuyên bạn nên sử dụng tệp Chuyển đổi để chuyển đổi web.config. Sự khác biệt nhiều hơn bạn có càng nhiều điều này sẽ giúp bạn.

Các bước mức cao:

  1. Tạo một cấu hình build mới thông qua quản lý cấu hình
  2. Đặt các giá trị một cách thích hợp trong mỗi tập tin cấu hình mới được tạo ra
  3. xây dựng và công bố
  4. Done và không bao giờ phải nhớ thay đổi giá trị trong nhiều tập tin cấu hình (phát triển, dàn dựng, phát hành, vv).

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

Các vấn đề liên quan