5

Tôi muốn gửi email khác nhau về sản xuất sau đó môi trường phát triển, chẳng hạn như chỉ gửi email cho tôi trong khi thử nghiệm. Tôi biết rằng tôi có thể đặt giá trị ứng dụng trong tệp webconfig hoặc kiểm tra url trước khi gửi email. Tôi muốn biết thực hành tốt nhất để làm điều này là gì hoặc nếu có một số tùy chọn khác mà tôi không biết về điều đó có thể tốt hơn? Mọi thông tin về chủ đề này sẽ được đánh giá cao.Cách tốt nhất để biết liệu trong môi trường sản xuất hoặc phát triển trong .NET

Trả lời

3

Tôi sử dụng tên gọi là Preprocessor Directives (in C#). Trong VB nó được gọi là chỉ Directives.

Tôi có một phương pháp helper như thế này:

public static bool IsDebug() 
{ 
    #if DEBUG 
     return true; 
    #else 
     return false; 
    #endif 
} 

Sau đó, bất cứ nơi nào trong mã người ta có thể gọi phương pháp này và trong thời gian chạy và nó sẽ cho biết nếu mã đang được chạy trong Debug (phát triển) hoặc nếu đó là phiên bản Release (sản xuất).

Dưới đây là tương đương #If...Then...#Else Directives in (VB).

1

Thay vì thay đổi mã của bạn, tại sao bạn không thiết lập mail server phát triển của bạn để mail chỉ cho bạn không phụ thuộc vào địa chỉ TỚI lĩnh vực?

Có vẻ tốt hơn là viết mã để làm điều đó.

+0

Cảm ơn bạn, tôi có thể thiết lập smtp trong IIS. Tôi nghĩ rằng tôi cũng có thể thiết lập để lưu trữ email trong một thư mục thay vì gửi chúng. – user1572948

1

Vâng, chỉ có bạn mới có thể xác định sản xuất là những gì và phát triển là gì, do đó, một lá cờ trong web.config là ok, nhưng một giải pháp thanh lịch hơn sẽ đòi hỏi một mô hình như Dependency Injection (DI) ala Spring.Net, StructureMap, và Castle Windsor đến tên một vài.

Khái niệm chính đằng sau DI là tách/cô lập các biến thể trong triển khai bằng cách tự động cung cấp thông tin về lớp học để khởi tạo trong thời gian chạy. Trong trường hợp này, ví dụ, tất cả mã của bạn sẽ được viết để đối phó với giao diện 'thư' (không biết đó là môi trường sản xuất hay môi trường dev) và bạn sẽ định cấu hình khung DI của mình để khởi tạo phiên bản sản xuất hoặc phiên bản phát triển của lớp triển khai thư. Đó là một chút sạch hơn trong đó bạn không phơi bày và proliferating config giá trị tham số.

Chắc chắn có một đường cong học tập ở đó mặc dù, vì vậy nó có thể không khả thi ở giai đoạn này của dự án của bạn, nhưng chắc chắn một cái gì đó để ghi nhớ.

1

Bạn có thể sử dụng web config inheritance của IIS để cho phép ứng dụng của bạn 'kế thừa' cài đặt ngữ cảnh chung từ môi trường tương ứng mà nó được triển khai.

Trong một thư mục cha của nơi ứng dụng NET của bạn đã được cài đặt (ví dụ /inetpub/wwwroot.web.config, hoặc thậm chí web.config gốc (\Windows\Microsoft.NET\Framework\ver\web.config), thêm môi trường của bạn cài đặt cụ thể, ví dụ như

Trong PROD

<appSettings> 
    <add key="sendMailTo" value="" /> 
    <add key="environmentName" value="PROD" /> 
    </appSettings> 

Trong DEV

<appSettings> 
    <add key="sendMailTo" value="[email protected]" /> 
    <add key="environmentName" value="DEV" /> 
    </appSettings> 

các thiết lập bối cảnh môi trường không triển khai mọi lúc bạn triển khai lại ứng dụng của bạn. Ngoài ra, tất cả các ứng dụng khác mà bạn triển khai đến y máy chủ của chúng tôi cũng có thể kế thừa các cài đặt này.

+0

Có bất kỳ chi phí hiệu suất nào với việc kiểm tra các giá trị cấu hình web trong toàn bộ trang web không? – user1572948

+0

@ user1572948 AppSettings được đọc một lần và được lưu trong bộ nhớ cache, tuy nhiên các cải tiến hiệu suất hơn nữa có thể được thực hiện http://stackoverflow.com/questions/1304897/asp-net-web-config-appsettings-performance – StuartLC

+0

Cảm ơn thông tin, nếu chúng đọc một lần và được lưu vào bộ nhớ cache, đây không phải là vấn đề đối với tôi – user1572948

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