2016-09-22 83 views
0

我用下面的方法來加密在我的web.config連接字符串運行:加密的連接字符串失敗時從服務器

public static void EncryptConnectionString() 
{ 
    var section = GetConfigSection(); 

    if (section.SectionInformation.IsProtected) return; 

    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 
    section.SectionInformation.ForceSave = true; 
    section.CurrentConfiguration.Save(); 

} 

private static ConnectionStringsSection GetConfigSection() 
{ 
    var config = WebConfigurationManager.OpenWebConfiguration("~"); 
    var section = config.GetSection("connectionStrings"); 
    if (section.ElementInformation.IsLocked || section.SectionInformation.IsLocked) return null; 

    return section as ConnectionStringsSection; 
} 
  • 我放在調用此方法Global.asax的Application_Start()方法
  • 在本地運行時,該方法起作用,我可以看到連接字符串變爲加密。
  • 從服務器運行時,該方法不起作用。我運行該應用程序,並且服務器連接字符串上的web.config保持未加密狀態。
  • 在別處手動調用該方法似乎會導致它的工作。如果我從應用程序的HomeController調用它,我可以看到連接字符串已被加密。
  • Global.asax的其他方法Application_Start()似乎可以正常工作,因爲我可以看到正在使用的已註冊捆綁包。

那麼爲什麼不調用這個方法,編輯web.config,從Application_Start()調用時工作?

回答

0

當應用程序第一次啓動時,或者更確切地說,應用程序收到第一個請求時,會調用Application_Start。嘗試點擊主控制器並讓它無所事事,然後檢查web.config是否被加密。