Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Получение параметров конфигурации


Автор: Alekz 5.6.2009, 13:09
Всем привет.

У приложения примерно такой конфигурационный файл:

Код

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel
          ref="tcp" 
          port="6000"
          bindTo="192.168.2.9" />
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>


Задача - получить в коде параметр "bindTo".

Дошел до:
Код

 ConfigurationSection cs = ConfigurationManager.GetSection("system.runtime.remoting") as ConfigurationSection;

При этом cs реально имеет тип IgnoreSection, а коллекция cs.ElementInformation.Properties - пустая...

Буду благодарен за помощь!

Автор: wester 5.6.2009, 23:12
набросал код , cильно не критикуйте , я только учусь smile

Код

using System;
using System.Xml;
class test
{
    static void Main()
    {
        
        XmlTextReader reader = new XmlTextReader(@"c:\a.xml"); // загружаем файлик
        
        reader.XmlResolver = null;
        string param = null; // записываем адрес        
        reader.WhitespaceHandling = WhitespaceHandling.None;        
        reader.MoveToContent();
        if (reader.Name != null)
        {
            while (reader.Read()) // читаем файл
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    
                    if (reader.HasAttributes)
                    {                        
                        reader.MoveToAttribute("bindTo"); // переходим к атрибуту с именем "bindTo"                        
                        param = reader.Value.ToString();    // параметр         
                    }
                }
            }
        }
        Console.WriteLine(param);
        Console.ReadLine();
    }
    
}

Автор: Alekz 9.6.2009, 10:18
wester, спасибо за помощь, но это не совсем то...
Сейчас я как раз так примерно и делаю (только через XmlDocument)

Но противный внутренний голос говорит мне что правильнее было бы через System.Configuration...

Автор: Conkistador 9.6.2009, 12:00
Цитата(Alekz @ 9.6.2009,  10:18)
wester, спасибо за помощь, но это не совсем то...
Сейчас я как раз так примерно и делаю (только через XmlDocument)

Но противный внутренний голос говорит мне что правильнее было бы через System.Configuration...

Тоесть ты хочешь добраться до этой секции используя средства чтения конфигурационного файла ? 
я сталкивался с такой задачей и в результате оказалось в разы проще прочитать либо просто как XML (что ты уже и сделал) либо получить необходимый параметр из настроек remouting'а.

например вот так я получил порт на котором запущен сервер 
Код

 RemotingConfiguration.Configure(@"MyProg.exe.config",false);

// Получаем порт на котором запущен сервер
IChannel[] myIChannelArray = ChannelServices.RegisteredChannels;
frmTest test = new frmTest();
test.Text = ((ChannelDataStore)((TcpChannel) myIChannelArray[0]).ChannelData).ChannelUris[0];



Автор: Alekz 9.6.2009, 16:11
Conkistador, для ремоутинга действительно это проще. Спасибо.

В моем случае устраивает любой из вариантов, поэтому тему можно считать закрытой.
Может под настроение попробую все таки сделать все через конфигурацию ))

ЗЫ
Кто прочтет, поставте Conkistador +1, а то у меня постов не хватает)

Автор: PashaPash 9.6.2009, 17:35
Alekz, секция ремоутинга приниципиально объявлена как IgnoreSection в machine.config, вряд ли до нее можно добраться через конфигурацию. И сам ремоутинг использует ручную загрузку файла при конфигурировании.
+1 done.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)