【问题标题】:Can you change the ConnectionString configuration value at runtime? Or... do I even need to?您可以在运行时更改 ConnectionString 配置值吗?或者……我什至需要吗?
【发布时间】:2013-01-25 02:17:02
【问题描述】:

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

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

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

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

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

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

所以我想第一个问题是,我是不是找错树了?我可以只设置 AspNetActiveDirectoryMembershipProvider(见后面的代码)需要的所有信息并从我的登录类中调用它吗?还是 ConnectionString 路由是在 .Net/C# 中建立连接的 Ipso facto 方式?因此,我确实需要了解如何在运行时更改/指定/添加值。

我能想到的三种可能性:- (第一种是我已经陷入困境的可能性)

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

  2. 更改 AspNetActiveDirectoryMembershipProvider 使用的内容,以便从我的 Login 类中神奇地让它使用 web.config 中定义的 EMEA_ADService 或 PACIFIC_ADService?

  3. 是否可以从我的 Login 类中定义一个新的 connectionString 并调用 AspNetActiveDirectoryMembershipProvider,而根本不使用 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>

这是在我发现我似乎无法更改 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;

非常欢迎任何提示!

附:我在工作中申请了 .Net/C# 课程! ;)

【问题讨论】:

  • 我很抱歉。祝你好运。
  • 您可以即时组合名称,因此如果您可以确定自己的位置,例如"Pacific",则可以使用Connections[location + '_ADService'] 获取正确的连接字符串。

标签: c# asp.net-4.0


【解决方案1】:

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

asp.net mvc multiple connection strings

Handling multiple connection strings in ONE DataAccess Layer

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

Microsoft 的文章特别有趣,因为它实际上从架构上查看了解决像您这样的困境的适当模式。我想你被棍子的短端卡住了!祝你好运!

【讨论】:

  • 感谢您的帮助。我想答案是,我需要先学习一些关于 .NET 和 C# 的知识! :) 因此,更改将不得不重新积压,直到我至少对在这种环境下如何做、我想做什么有一个模糊的想法!大声笑
  • @user2008415 欢迎您!你正在处理一些具有挑战性的事情,我希望你能找到你正在寻找的所有答案!祝你好运,感谢您接受我的回答。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2019-03-11
    相关资源
    最近更新 更多