簡體   English   中英

在運行時配置ASP.NET會話狀態

[英]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

根據本文,您可以自定義會話狀態提供程序:

http://www.exforsys.com/tutorials/asp.net-2.0/asp.net-2.0-customizing-the-session-state-mechanism.html

此處的信息可用於設計環境感知會話狀態提供程序,該提供程序可以根據.config文件中的配置或某些其他環境密鑰來選擇連接字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM