您可以在运行时更改ConnectionString配置值吗?或者......我甚至需要吗?

时间:2013-01-24 18:01:27

标签: c# asp.net-4.0

第一篇文章,我是一个完整的.Net / C#新手!

我继承了C#wed应用程序,因为有人离开工作而我是唯一一个有带宽的应用程序!但不是.Net,C#知识!

该应用程序供世界各地不同网站的用户使用。他们使用公司登录详细信息登录,因此根据他们所在的位置(欧洲,美国或印度)登录到不同的服务器。

编写应用程序的人无法确定如何根据位置切换web.config中的ConnectionString,因此复制了每个域的整个应用程序!对于每个重复版本的应用程序,唯一的变化是web.config中的单个IP地址!然后做了一个简单的网页首页,根据他们在世界上所说的位置,将用户带到了“他们的”应用版本!

我要做的第一件事是转移到单个版本进行维护,所以我需要能够切换连接字符串或如何登录?

我花了几天时间试图弄清楚如何从我的Login类中获取ConnectionString(在web.config中定义),只发现web.config中设置的值似乎是只读的,所以我可以'改变它们。

所以我想第一个问题是,我是在咆哮错误的树吗?我是否可以设置AspNetActiveDirectoryMembershipProvider(稍后请参阅代码)所需的所有信息并从我的登录类中调用它?或者是ConnectionString路由Ipso事实上如何在.Net / C#中建立连接?因此,我确实需要了解如何在运行时更改/指定/添加值。

我能想到的三种可能性: - (第一种是我与之相提并论的)

  1. 从我的登录类更改web.config中的ADService的ConnectionString?

  2. 更改AspNetActiveDirectoryMembershipProvider使用的内容,因此从我的Login类中可以使用它来使用web.config中定义的EMEA_ADService或PACIFIC_ADService吗?

  3. 是否可以从我的Login类中定义一个新的connectionString并调用AspNetActiveDirectoryMembershipProvider,而不是使用web.config进行此连接?
  4. 这是我/他的web.config文件和我的登录类

    来自Web.config的剪辑

    <connectionStrings>
        <add name="ADService" connectionString="LDAP://12.345.67.8" />          *---- Original ConnectionString (IP address changed)----* 
        <add name="EMEA_ADService" connectionString="LDAP://12.345.67.8" />     *---- Added by me playing around unsuccessfully! ----* 
        <add name="PACIFIC_ADService" connectionString="LDAP://12.345.67.9" />  *---- Added by me playing around unsuccessfully! ----* 
        ~
      </connectionStrings>
    
    <authentication mode="Forms">
          <forms loginUrl="~/Login.aspx" timeout="2880" />     *---- The background class for this popup (Login.aspx.cs) is where I'm currently trying to affect ConnectionString----* 
        </authentication>
                                                               *---- Pretty sure this is the bit that actually does the login verification----* 
        <membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
          <providers>
            <clear />
            <add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,            System.Web, Version=4.0.0.0, Culture=neutral,            PublicKeyToken=12345678" connectionStringName="ADService" applicationName="/." description="ADService" />
          </providers>
        </membership>
    

    就我发现我似乎无法改变ConnectionString而言,这是我在课堂上的所有内容!

    来自Login.aspx.cs的剪辑

    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
             ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings; //this is now working :)
            string userDomain = Environment.UserDomainName;  //Probably don't need this, it seems to give the login domain on the machine. Don't know yet if that will be the users machine or the server the app runs on?
            if (connections.Count != 0)
            {
                foreach (ConnectionStringSettings connection in connections)
                {
                    string testname = connections["ADService"].Name;
                    string testConnectionString = connections["ADService"].ConnectionString;
                    connections["ADService"].ConnectionString = "LDAP://12.345.67.9";
                    testConnectionString = connections["ADService"].ConnectionString;
    

    任何暗示都会非常受欢迎!

    P.S。我已经申请了.Net / C#课程! ;)

2 个答案:

答案 0 :(得分:5)

您不希望更改现有的连接字符串。相反,您需要更改数据访问层用于调用不同服务堆栈的连接字符串。然后,您可以根据要使用的输入参数在运行时选择连接字符串。在您的情况下可能是IP范围。

asp.net mvc multiple connection strings

Handling multiple connection strings in ONE DataAccess Layer

http://msdn.microsoft.com/en-us/library/aa479086.aspx

微软的文章特别有趣,因为它实际上需要一个架构的外观,以解决像你这样的困境。我觉得你被棍子的短端困住了!祝你好运!

答案 1 :(得分:0)

无法在运行时修改Web.config。我建议通过网站上的登录链接或组合框设置某种标志,供人们选择他们想要登录的地方。确定用户想要做什么不是服务器的工作。