[Settings] проблема с сериализацией экземпляров WebProxy
От: StevenIvanov США  
Дата: 23.10.08 20:36
Оценка:
Дано: приложение WinForms, .NET 2.0, C# 2008, Settings созданные визардом.
Необходимо: в сеттингах хранить экземпляры System.Net.WebProxy

По умолчанию визард генерит следующее:

    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

//... вот здесь наше злодейское свойство:
        [global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public global::System.Net.WebProxy WebProxyInstance {
            get {
                return ((global::System.Net.WebProxy)(this["WebProxyInstance"]));
            }
            set {
                this["WebProxyInstance"] = value;
            }
        }



— в этом случае настройки не сохраняются — и при повторном запуске приложения в переменной WebProxyInstance находится null.

Проблему можно частично решить добавив вручную атрибут SettingsSerializeAs к свойству:

        [global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)]
        public global::System.Net.WebProxy WebProxyInstance {
            get {
                return ((global::System.Net.WebProxy)(this["WebProxyInstance"]));
            }
            set {
                this["WebProxyInstance"] = value;
            }
        }


Но тогда возникают две проблемы:
1. WebProxy при сериализации не сохраняет свойство Credentials (тип ICredentials)
2. При изменении сеттингов через визард мастер удаляет изменения внесенные вручную.

Как бороться, куда копать, что читать?
Заранее спасибо и виртуальный литр свежего и холодного пива ответившим
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.