Проблемы с Web.config и App.config

Ваш беспорядок находится в размышлении, что сокет определяется IP Сервера: Порт сервера. Когда в действительности, сокеты однозначно определяются четырехразрядным байтом информации:

Client IP : Client Port и Server IP : Server Port

Поэтому, в то время как IP Сервера и Порт сервера являются постоянными во всех принятых соединениях, информация о стороне клиента - то, что позволяет этому отслеживать то, куда все идет.

Пример для разъяснения вещей:

Говорят, что у нас есть сервер в 192.168.1.1:80 и два клиента, 10.0.0.1 и 10.0.0.2.

10.0.0.1 открывает соединение на локальном порте 1234 и соединяется с сервером. Теперь серверу определили один сокет следующим образом:

10.0.0.1:1234 - 192.168.1.1:80  

Теперь 10.0.0.2 открывает соединение на локальном порте 5678 и соединяется с сервером. Теперь сервер имеет два сокета, определенные следующим образом:

10.0.0.1:1234 - 192.168.1.1:80  
10.0.0.2:5678 - 192.168.1.1:80
5
задан 15 revs 6 September 2009 в 16:24
поделиться

4 ответа

Другой способ - использовать такой инструмент, как http://www.red-gate.com/products/SQL_Compare/index.htm

Он генерирует сценарий изменения для разовое развертывание. Хорошо то, что вам больше не нужно рассчитывать на дисциплину разработчиков.

Кроме того, мне все еще нравится иметь БД в SVN. Я использую для этого SQLScript, см. бесплатную утилиту для создания сценариев объектов БД в ms sql .

РЕДАКТИРОВАТЬ

Теперь я использую Redgate SQL Version . С его помощью довольно легко внести изменения в SVN. Единственная проблема в том, что мне нужно запустить и использовать Приложение, это не автоматический процесс.

Таким образом, нам не нужно будет постоянно читать конфигурацию, и мы также знаем, когда конфигурация изменяется.

ИМО, ЭТО САМЫЙ БЫСТРЫЙ И ЛЕГКИЙ СПОСОБ РЕШЕНИЯ ПРОБЛЕМЫ , нет необходимости использовать сторонние фреймворки (ни время, необходимое для ее изучения / программирования).

.

Пример кода:

    protected void Page_Load(object sender, EventArgs e)
    {
        DBConfiguration cachConf;
        cachConf = Cache["cachConf"] as DBConfiguration;
        if (cachConf == null)
        {
            cachConf = new DBConfiguration();

            XmlDocument doc = new XmlDocument();
            doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/MyConf.xml");
            XmlNodeList xnl = doc.GetElementsByTagName("username");
            XmlElement xe = (XmlElement)xnl[0];
            cachConf.Username = xe.InnerText.ToString();
            xnl = doc.GetElementsByTagName("password");
            xe = (XmlElement)xnl[0];
            cachConf.Password = xe.InnerText.ToString();               

            Cache.Insert("cachConf", cachConf, 
                new System.Web.Caching.CacheDependency(
                    HttpContext.Current.Request.PhysicalApplicationPath + "MyConf.xml"),
                    DateTime.Now.AddMinutes(60), TimeSpan.Zero,
                    System.Web.Caching.CacheItemPriority.Default,
                    new System.Web.Caching.CacheItemRemovedCallback(
                        CacheItemRemovedCallBack));
        }
        LabelUsername.Text = cachConf.Username;
        LabelPassword.Text = cachConf.Password;            
    }

    private void CacheItemRemovedCallBack(string key, object value, CacheItemRemovedReason reason)
    {
        //Response.Write("Hello world"); 
    }
5
ответ дан 13 December 2019 в 22:12
поделиться

Проблема 1. Изменения времени выполнения: Решение, которое Microsoft надеется применить к этому типу проблемы, - просто оставить веб-сервер без состояния. Когда приложение ASP.NET перезапускается, оно позволяет существующим запросам завершать запуск новых запросов в новом процессе. Дополнительные сведения см. В статье Переработка процессов IIS . Изменение в web.config перезапускает рабочий процесс, но пользователи этого не заметят (если вы не сохраните состояние в процессе веб-сервера). Это дизайн MS.

Если вы хотите отслеживать изменения, не перезаполняя процесс, вам нужно что-то другое, кроме поведения web.config по умолчанию. В качестве примера можно привести файлы проекта системы круиз-контроля. У них есть компонент, который сопоставляет объекты с xml, используя его, вы можете использовать класс FileSystemWatcher для отслеживания изменений.

Проблема 2 - Пользовательские конфигурации: Похоже, у вас есть компоненты из разных библиотек, которые имеют разные зависимости. Ваша основная сборка нуждается в средствах для создания экземпляра службы с заданным набором зависимостей. Модель поставщика данных MS - это круто, но не настолько.

Чтобы было круто, используйте инверсию контейнера управления, потому что это именно то, что они делают. Мне нравится autofac (потому что мне нравится ссылка на Филипа К. Дика), но Castle Windsor великолепен.

Теперь, если вы говорите об изменениях баз данных или поставщиков данных "на лету", возможно, конфигурация не подходит. Если вы составляете отчеты по x базам данных типов y, вам нужен центральный репозиторий этой информации о базе данных, а файл конфигурации - неподходящее место, и контейнер IOC не является правильным решением.

2
ответ дан 13 December 2019 в 22:12
поделиться

Вы можете сохранить учетные данные во вторичном файле конфигурации, на который ссылается web.config, следующим образом:

<appSettings file="AppSettings.config"/>

Вам все равно нужно быть осторожным, чтобы избежать конфликтов редактирования во внешнем файле.

3
ответ дан 13 December 2019 в 22:12
поделиться

Как предлагал Осадный, попробуйте Замок Виндзор:

http://www.castleproject.org/container/

Вы делаете инверсию управления вручную. Виндзор снимет с вас ношу.

0
ответ дан 13 December 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: