Tôi biết câu hỏi này là cũ, nhưng tôi muốn đăng câu trả lời dựa trên tình trạng hiện tại của công việc trong thế giới ASP.NET \ IIS kết hợp với kinh nghiệm thực tế của tôi.
Gần đây tôi đã dẫn đầu một dự án tại công ty của mình, nơi tôi muốn hợp nhất và quản lý tất cả các cài đặt appConnection & connectionStrings trong tệp web.config của chúng tôi ở một vị trí trung tâm. Tôi muốn theo đuổi một cách tiếp cận, nơi cài đặt cấu hình của chúng tôi được lưu trữ trong ZooKeeper do các dự án đáo hạn & ổn định. Chưa kể thực tế rằng ZooKeeper là do thiết kế một cấu hình ứng dụng quản lý cluster &.
Mục tiêu của dự án rất đơn giản;
- get ASP.NET để giao tiếp với Zookeeper
- trong Global.asax, Application_Start - kéo các thiết lập web.config từ Zookeeper.
Khi nhận được thông tin kỹ thuật về ASP.NET để nói chuyện với ZooKeeper, tôi nhanh chóng tìm thấy và nhấn vào tường với mã sau;
ConfigurationManager.AppSettings.Add(key_name, data_value)
Tuyên bố hợp lý nhất vì tôi muốn ADD cài đặt mới vào bộ sưu tập appSettings. Tuy nhiên, với tư cách là người đăng ban đầu (và nhiều người khác) được đề cập, lệnh gọi mã này trả về một lỗi nói rằng bộ sưu tập là chỉ đọc.
Sau khi thực hiện một số nghiên cứu và nhìn thấy tất cả những cách khác nhau điên rồ mọi người làm việc xung quanh vấn đề này, tôi đã rất nản lòng. Thay vì từ bỏ hoặc giải quyết cho những gì dường như là một kịch bản ít hơn lý tưởng, tôi quyết định đào sâu vào và xem nếu tôi đã bỏ lỡ một cái gì đó.
Với một chút thử và sai, tôi thấy mã sau sẽ thực hiện chính xác những gì tôi muốn;
ConfigurationManager.AppSettings.Set(key_name, data_value)
Sử dụng dòng mã này, giờ đây tôi có thể tải tất cả 85 khóa ứng dụngCài đặt từ ZooKeeper trong ứng dụng của tôi_Start.
Liên quan đến báo cáo chung về các thay đổi đối với web.config kích hoạt IIS tái chế, tôi đã chỉnh sửa cài đặt ứng dụng sau để theo dõi tình huống đằng sau hậu trường;
appPool-->Advanced Settings-->Recycling-->Disable Recycling for Configuration Changes = False
appPool-->Advanced Settings-->Recycling-->Generate Recycle Event Log Entry-->[For Each Setting] = True
Với sự kết hợp của các cài đặt này, nếu quá trình này là nguyên nhân gây ra tái chế ứng dụng, mục ghi nhật ký sự kiện phải được ghi lại.
Điều này dẫn tôi đến kết luận rằng có thể thực sự an toàn, để tải cài đặt ứng dụng từ phương tiện lưu trữ tập trung.
Tôi nên đề cập rằng tôi đang sử dụng IIS7.5 trên Windows 7. Mã sẽ được triển khai đến IIS8 trên Win2012. Bất cứ điều gì liên quan đến sự thay đổi câu trả lời này, tôi sẽ cập nhật câu trả lời này cho phù hợp.
Đây là một liên kết tốt giải thích độc đáo về việc sửa đổi web.config t thời gian chạy và tác động của nó trong ứng dụng. [http://aspdotnethacker.blogspot.com/2010/05/modify-webconfig-file-at-runtime.html](http://aspdotnethacker.blogspot.com/2010/05/modify-webconfig-file-at- runtime.html) –
@ user330004 liên kết bạn cung cấp không còn hợp lệ – McArthey
Chỉ mất vài giây để tìm [phiên bản đã lưu trữ] (http://web.archive.org/web/20111217082254/http://aspdotnethacker. blogspot.com/2010/05/modify-webconfig-file-at-runtime.html)! – stuartd