![](/img/trans.png)
[英]Configure ASP.NET Redis Session State Provider for Sentinel Configuration
[英]Configure ASP.NET Session State at runtime
我們有一個使用SQL Server會話狀態的ASP.NET網站。 狀態在Web.config
配置為:
<sessionState mode="SQLServer" sqlConnectionString="data source=TheServer;
User ID=TheUser;password=ThePassword;" cookieless="false" timeout="480"/>
但是存在三種環境(開發/階段/生產)。 所有其他連接字符串的配置如下:
<configuration>
<connectionStrings>
<add name="Development_Db1" connectionString="..."/>
<add name="Production_Db1" connectionString="..."/>
</connectionStrings>
</configuration>
在運行時,我們根據主機名選擇一個連接到數據庫。 不幸的是,會話狀態連接字符串似乎已在web.config
進行了硬編碼。
有沒有一種方法可以在運行時配置SQL Server會話狀態,或使其從connectionStrings
部分引用連接字符串?
事實證明,有一個相當簡單的方法可以做到這一點。 會話狀態提供了一項名為“ 分區”的功能,您可以在其中將狀態分布在多個SQL Server上。 您可以提供根據會話ID(SID)選擇SQL Server的功能。 訣竅是您可以將此功能與一台服務器一起使用,只是動態地選擇服務器。
web.config
配置如下所示:
<sessionState mode="SQLServer"
partitionResolverType="YourNamespace.PartitionResolver"
cookieless="false"
timeout="60" />
選擇SQL Server的函數如下所示:
public class PartitionResolver : IPartitionResolver
{
public void Initialize() {}
// The key is a SID (session identifier)
public String ResolvePartition(Object key)
{
return <grab your config here>;
}
}
這種方法使我們能夠繼續使用一個web.config進行生產和開發。
如上所述,我認為您不應在web.config中同時擁有dev和prod連接字符串。 您可以使用Web部署項目,從而解決該問題。 您可以使用Web部署項目來基於構建替換配置設置。 例如,您可能有兩個外部配置文件,分別稱為connectionStrings.dev.config和connectionStrings.prod.config。 如果您在Debug中進行構建,則將使用dev.config,但如果在Release中進行構建,則將使用prod.config。
與VS 08和10有所不同。以下是一些參考:
VS 2008- http://johnnycoder.com/blog/2010/01/07/deploy-aspnet-web-applications-with-web-deployment-projects/
VS 2010- http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx
根據本文,您可以自定義會話狀態提供程序:
此處的信息可用於設計環境感知會話狀態提供程序,該提供程序可以根據.config文件中的配置或某些其他環境密鑰來選擇連接字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.