C# 能否在运行时更改ConnectionString配置值?或我需要吗?

C# 能否在运行时更改ConnectionString配置值?或我需要吗?,c#,asp.net-4.0,C#,Asp.net 4.0,第一篇文章,我是一个完全的.Net/C新手,被扔到了最深处 我继承了一个C#wed应用程序,因为有人下班了,而我是唯一拥有带宽的人!但不是.Net,C#knowledge 该应用程序被世界各地不同网站的用户使用。他们使用公司登录详细信息登录,因此他们根据所在地(欧洲、美国或印度)登录到不同的服务器 编写该应用程序的人无法根据位置确定如何在web.config中切换ConnectionString,因此为每个域复制了整个应用程序!唯一的变化是在web.config中为每个重复版本的应用程序提供一个

第一篇文章,我是一个完全的.Net/C新手,被扔到了最深处

我继承了一个C#wed应用程序,因为有人下班了,而我是唯一拥有带宽的人!但不是.Net,C#knowledge

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

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

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

我花了几天时间试图弄清楚如何从我的登录类中访问ConnectionString(在web.config中定义),结果发现web.config中设置的值似乎是只读的,所以我无法更改它们

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

我能想到三种可能性:-(第一种是我曾与之合作的那种)

  • 是否从我的登录类更改my web.config中ADService的ConnectionString

  • 更改AspNetActiveDirectoryMembershipProvider使用的内容,以便从我的登录类magicly让它使用web.config中定义的EMEA\u ADService或PACIFIC\u ADService

  • 是否可以定义一个新的connectionString并从我的登录类调用AspNetActiveDirectory MembershipProvider all,而不使用web.config进行此连接
  • 下面是我/他的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>
    
    任何暗示都是非常受欢迎的


    另外,我已经申请了一门.Net/C#工作中的课程!)

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


    微软的这篇文章特别有趣,因为它实际上从体系结构的角度研究了解决像您这样的难题的适当模式。我想你被棍子的短端卡住了!祝你好运

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

    非常抱歉。祝你好运。你可以动态地组合一个名称,因此如果你可以确定你在哪里,例如“Pacific”,那么你可以使用
    Connections[location+'\u ADService']
    获得正确的连接字符串。谢谢你的帮助。我想答案是我需要离开去学习一些关于.NET和C的知识(首先!)因此,在我至少对如何在这种环境下做什么、我想做什么有一个模糊的想法之前,更改将不得不回到积压工作中!lol@user2008415不客气!你正在处理一些具有挑战性的事情,我希望你能找到所有你想要的答案!祝你好运,谢谢你接受我的回答。
    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;