我已经使用WinForms
数据提供程序编写了一个供多用户使用的DataContext
应用程序。我们知道,在为客户制作安装文件之前,应像下面那样设置App.config文件(包括连接字符串):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="WindowsFormsApplication1.Properties.Settings.MyDBonnectionString"
connectionString="Data Source= 192.168.17.1;Initial Catalog=MyDB;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
由于服务器IP可能会更改,所以我的想法是让组织的IT部门给我一个URL,该URL包含一个文件,其中存储了服务器IP(MyDB附加在该文件中)。因此,我编写如下代码以读取该文件:
class GetServerIP
{
private string getServerIP ()
{
string ConnString = "";
XmlReader xmlReader = XmlReader.Create("http://www.OrgITDept/Files/MyAppServerIP.xml");
while (xmlReader.Read())
{
if ((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == " connectionString "))
{
if (xmlReader.HasAttributes)
{
ConnString = "Data Source=" + xmlReader.GetAttribute("IPAdress") + "Initial Catalog = MyDB; Integrated Security = True";
}
}
}
return ConnString;
}
}
然后,我想我可以调用上述方法以用其输出替换App.config文件中的“ connectionString”行,并在运行时(以LogIn形式)设置连接字符串。像这样:
public void WritingXml()
{
string dynamicConnStr = getServerIP();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(System.Windows.Forms.Application.StartupPath + @"App.config");
XmlNodeList userNodes = xmlDoc.SelectNodes("//configuration/connectionStrings/connectionString");
foreach (XmlNode u in userNodes)
{
u.Attributes["connectionString"].Value = dynamicConnStr;
}
xmlDoc.Save(System.Windows.Forms.Application.StartupPath + @"App.config");
}
我有一些问题:
我的想法可行吗?
在创建应用程序安装文件之后是否可以编辑App.config文件? (因为在解决方案文件夹/ bin中没有App.config文件。实际上它位于解决方案根文件夹中,据我所知,我们是从bin文件夹而不是整个解决方案文件夹中创建安装文件(通过ex InstallAwere软件)) / p>
是否有任何安全问题要解决?
如果我们在包含服务器IP的文件中输入密码(以提高安全性),是否可以通过上述代码读取其内容?
任何建议或替代性想法或安全注意事项都会受到赞赏。