是否可以在运行时更改连接字符串配置值?或..我什至需要吗
本文关键字:配置 运行时 字符串 连接 是否 | 更新日期: 2023-09-27 17:55:57
第一篇文章,我是一个完整的 .Net/C# 新手!
我继承了一个 C# 结婚应用程序,因为有人在工作时离开,而我是唯一一个有带宽的人!但不是.Net,C#知识!
该应用程序被世界各地不同网站上的人们使用。他们使用公司登录详细信息登录,因此他们根据他们所在的位置(欧洲、美国或印度)登录不同的服务器。
编写应用程序的人无法弄清楚如何根据位置在 web.config 中切换 ConnectionString,因此为每个域复制了整个应用程序!唯一的变体是web.config中每个重复版本的应用程序的单个IP地址! 然后做了一个简单的网络首页,根据他们说他们在世界上的位置,将用户带到应用程序的"他们的"版本!
我要做的第一件事是移动到单个版本进行维护,所以我需要能够切换连接字符串或如何登录?
我花了几天时间试图弄清楚如何从我的登录类访问 ConnectionString(在 web.config 中定义),只是发现 web.config 中设置的值似乎是只读的,所以我无法更改它们。
所以我想第一个问题是,我是不是吠错了树?我是否可以只设置 AspNetActiveDirectoryMemberProvider 所需的所有信息(请参阅后面的代码)并从我的登录类调用它?或者 ConnectionString 路由是在 .Net/C# 中设置连接的 Equiso 事实方法?因此,我确实需要了解如何在运行时更改/指定/添加值。
我能想到的三种可能性:- (第一种是我磨得很厉害的那种)
-
从我的登录类更改我的 web.config 中 ADService 的连接字符串?
-
更改 AspNetActiveDirectoryMemberProvider 使用的内容,以便从我的登录类中神奇地让它使用 web.config 中定义的EMEA_ADService或PACIFIC_ADService?
- 是否可以定义一个新的连接字符串并调用 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 之前在我的课堂上所掌握的!
登录剪报.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# 课程!;)
您不希望更改现有的连接字符串。 相反,您需要更改数据访问层用于调用不同服务堆栈的连接字符串。 然后,可以根据要使用的任何输入参数在运行时选择连接字符串。在您的情况下,这可能是一个 IP 范围。
asp.net MVC 多个连接字符串
在一个数据访问层中处理多个连接字符串
http://msdn.microsoft.com/en-us/library/aa479086.aspx
微软的文章特别有趣,因为它实际上从架构上看了解决像你这样的困境的正确模式。 我想你被棍子的短端卡住了! 祝你好运!
Web.config 不能在运行时修改。我建议通过网站上的登录链接或组合框设置某种标志,供人们用来选择他们想要登录的位置。服务器的工作不是弄清楚用户想要做什么。