在我们的服务器中,我们在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);
配置完成后,如何配置端口号,而不是手动解析文件?
答案 0 :(得分:3)
毕竟看起来有可能。在调用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并获取端口。
GRAIT SUCCESS!
答案 1 :(得分:0)
您只能通过代码或配置进行配置,不能同时执行这两项操作。这意味着您无法通过代码访问配置的详细信息(不自行传递xml文件)。
答案 2 :(得分:0)
我刚看了一下ConfigurationManager
来帮助获取你需要的值...不幸的是,它看起来没有为system.runtime.remoting设置sectionGroup:即,此调用失败:< / p>
var cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var sectionGroup = cfg.GetSectionGroup("system.runtime.remoting");
因此,在我看来,您可以使用框架中存在的任何内容来很好地提取它。我不确定为什么这个sectionGroup在代码中不存在。