Я использую .Net 4.0 в приложении WPF с MVVM
Я добавил пользовательский раздел MyAppCustom.ReportServer.Settings в группу разделов userSettings , как показано ниже:
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b87a6a562548e011" >
<section name="MyApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b87a6a562548e011" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="MyAppCustom.ReportServer.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b87a6a562548e011" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<userSettings>
<MyApp.Properties.Settings>
<setting name="Timezone" serializeAs="String">
<value>Asia/Calcutta</value>
</setting>
<setting name="Language" serializeAs="String">
<value>en_US</value>
</setting>
<setting name="SSO" serializeAs="String">
<value>True</value>
</setting>
<setting name="LoginPeriod" serializeAs="String">
<value>480</value>
</setting>
<setting name="FirstLaunch" serializeAs="String">
<value>True</value>
</setting>
<setting name="IP" serializeAs="String">
<value />
</setting>
<setting name="Port" serializeAs="String">
<value />
</setting>
<setting name="ReportServer" serializeAs="String">
<value>http://10.2.130.121/ReportServer</value>
</setting>
<setting name="Reports" serializeAs="String">
<value>/MyReports/UserReport</value>
</setting>
</BallyTech.UserMatrix.Properties.Settings>
<MyAppCustom.ReportServer.Settings>
<setting name="UserName" serializeAs="String">
<value>Administrator</value>
</setting>
<setting name="Password" serializeAs="String">
<value>admin</value>
</setting>
<setting name="Domain" serializeAs="String">
<value></value>
</setting>
</BallyTech.UserMatrix.ReportServer.Settings>
Я читаю эти настройки следующим образом:
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
System.Configuration.ClientSettingsSection configClient = ((System.Configuration.ClientSettingsSection)(config.GetSection("userSettings/MyAppCustom.ReportServer.Settings")));
string userName = configClient.Settings.Get("UserName").Value.ValueXml.InnerText;
string password = configClient.Settings.Get("Password").Value.ValueXml.InnerText;
userName и пароль относятся к информации для входа на сервер, на котором был установлен сервер отчетов SSRS , откуда я получаю отчеты и показываю их через ReportViewer в моем приложении на клиенте.
Учитывая, что я не должен сохранять учетные данные в моем app.config в виде простого текста, у меня есть 2 метода для шифрования и дешифрования разделов app.config:
public static void EncryptConfigSection(string sectionName)
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection configSection = config.GetSection(sectionName);
if (configSection != null)
{
if (!configSection.SectionInformation.IsProtected)
{
if (!configSection.ElementInformation.IsLocked)
{
configSection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
configSection.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
}
}
}
}
public static void DecryptConfigSection(string sectionName)
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection configSection = config.GetSection(sectionName);
if (configSection != null)
{
if (!(configSection.SectionInformation.IsLocked))
{
configSection.SectionInformation.UnprotectSection(); config.Save();
}
}
}
Я хочу, чтобы это имя пользователя и пароль настраивались пользователем в случае изменения сервера отчетов. Итак, я бы предоставил пользователю интерфейс для предоставления имени сервера отчетов, пути к отчету и учетных данных для этого сервера. Я не могу выяснить, каким образом можно было бы ввести предоставленные пользователем учетные данные в этот раздел, а также сохранить его и обновить настройки во время выполнения.
Я не хочу использовать раздел MyApp.Properties.Settings для сохранения информации о полномочиях, поскольку я часто использую ее в своем приложении через Properties.Settings.Default. [PropertyName ] и шифрование и дешифрование всей информации не требуется.
Кроме того, я открыт для любой альтернативной идеи, где я могу сохранить учетные данные и зашифровать их и прочитать в моем приложении.