2012-06-21 101 views
2

我有一個使用ASP.NET SQL成員資格提供程序的Web角色。目前該配置位於Web.Config文件中。我想將連接字符串配置爲Web角色設置,而不是將其設置在Web.Config中。我想這樣做的主要原因是我可以在azure項目上設置配置,以發佈到不同的託管服務(dev,qa等)。現在,我必須在每次我想要手動編輯web.config時發佈到不同的服務。從Web角色設置配置ASP.NET SQL成員資格提供程序

我對如何完成此操作有幾點想法。

  1. 編寫一個自定義成員資格提供程序,它包裝SQL提供程序並向其提供自定義配置。
  2. 將某些東西放入Web角色OnStart方法來更改Web.config文件中的連接字符串。

有沒有人做過這樣的事情,或者就如何完成這個選擇有什麼建議,或者有什麼建議?

回答

3

Windows Azure SDK允許您在每個環境中進行多項服務配置。但web.config修改有點困難。在你的情況下,我會建議你編寫一些代碼(或啓動任務),從服務配置中讀取連接字符串並將其寫入web.config。

安迪的博客文章「Programmatically modify web.config on WebRole Startup」正好說明你如何能做到這一點:

public override bool OnStart() 
{ 
    using (var server = new ServerManager()) 
    { 
     // get the site's web configuration 
     var siteNameFromServiceModel = "Web"; // TODO: update this site name for your site. 
     var siteName = 
      string.Format("{0}_{1}", RoleEnvironment.CurrentRoleInstance.Id, siteNameFromServiceModel); 
     var siteConfig = server.Sites[siteName].GetWebConfiguration(); 

     // get the appSettings section 
     var appSettings = siteConfig.GetSection("appSettings").GetCollection(); 

     AddElement(appSettings, "deploymentId", RoleEnvironment.DeploymentId); 
     AddElement(appSettings, "internalEndpointPort", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints 
      .First(t=>t.Key=="InternalEndpoint1").Value 
      .IPEndpoint.Port.ToString()); 

     server.CommitChanges(); 
    } 
    return base.OnStart(); 
} 
+0

被忽略的常規Web.config文件,從GUI採取設置,部署到Azure的時候(我是一個天青新手)? – IrishChieftain

+1

博客文章中未提及的一件事是,您必須以提升的權限運行您的角色才能保存配置更改。 –

+1

IrishChieftain總是部署Web.config(它仍然需要您的ASP.NET Web應用程序正常工作),但通過此代碼,您可以使用ServiceConfiguration中的設置修改它。 –

相關問題