В C # как мне ссылаться на номер порта, настроенный в app.exe.config? - PullRequest
2 голосов
/ 22 сентября 2011

На нашем сервере мы настраиваем порт в app.config следующим образом:

<configuration>
   <system.runtime.remoting>
      <application>
         <channels>
            <channel ref="tcp" port="1234" />
         </channels>
      </application>
   </system.runtime.remoting>
</configuration>

Затем мы приступаем к настройке сервера со следующим кодом C #:

RemotingConfiguration.Configure(string.Format("{0}{1}", appFolder, "app.exe.config"), false);

Какссылаться на номер порта после того, как он был настроен, за исключением анализа файла вручную?

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011

Похоже, это возможно в конце концов. После вызова RemotingConfiguration.Configure (string, bool) я запускаю следующий метод:

private string GetPortAsString()
          {
             // Parsing
             System.Runtime.Remoting.Channels.IChannel[] channels = System.Runtime.Remoting.Channels.ChannelServices.RegisteredChannels;
             foreach (System.Runtime.Remoting.Channels.IChannel c in channels)
             {
                System.Runtime.Remoting.Channels.Tcp.TcpChannel tcp = c as System.Runtime.Remoting.Channels.Tcp.TcpChannel;
                if (tcp != null)
                {
                   System.Runtime.Remoting.Channels.ChannelDataStore store = tcp.ChannelData as System.Runtime.Remoting.Channels.ChannelDataStore;
                   if (store != null)
                   {
                      foreach (string s in store.ChannelUris)
                      {
                         Uri uri = new Uri(s);
                         return uri.Port.ToString(); // There should only be one, and regardless the port should be the same even if there are others in this list.
                      }
                   }
                }
             }

             return string.Empty;
          }

Это дает мне необходимую информацию TcpChannel, которая позволяет мне захватить ChannelUri и получить порт.

УСПЕХ ГРЕЙТА!

0 голосов
/ 22 сентября 2011

Я только что взглянул на ConfigurationManager, чтобы получить нужные значения ... к сожалению, не похоже, что существует sectionGroup для system.runtime.remoting: т. Е. Этот вызов завершается неудачно:

var cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var sectionGroup = cfg.GetSectionGroup("system.runtime.remoting");

enter image description here

Так что мне не кажется, что вы можете использовать что-либо, существующее в фреймворке, чтобы извлечь это красиво. Я не уверен, почему эта секция Group не существует в коде.

0 голосов
/ 22 сентября 2011

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

...