Я написал 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-адрес сервера может измениться, моя идея состоит в том, чтобы сделать ИТ-отдел организацииотдел дайте мне 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;
}
}
Тогда я думаю, что я могу вызвать вышеуказанный метод, чтобы заменить строку «connectionString» в файле App.config на ее вывод и установить строку подключенияво время выполнения (например, в форме входа в систему).Примерно так:
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. Действительно, он находится в корневой папке решения, и, насколько мне известно, мы создаем установочный файл (с помощью программного обеспечения InstallAwere) из папки bin, а не всей папки решения)
Есть ли какие-либо проблемы безопасности, с которыми нужно справиться?
Если мы добавим пароль к файлу, содержащему IP-адрес сервера (для более высокого уровня безопасности) можно ли прочитать его содержимое с помощью кода, как указано выше?
Будут оценены любые предложения, альтернативные идеи или соображения безопасности.