Wcf 在代码中访问App.Config文件的System.ServiceModel部分
我在控制台应用程序中托管了一个简单的WCF服务,我想做的是在控制台上显示app.config信息,例如基址和端点信息,而不使用代码中的硬编码值 这有可能吗?在应用程序对配置的设置方式感兴趣的生产环境中,这似乎是一个合理可行的场景 这是主机代码Wcf 在代码中访问App.Config文件的System.ServiceModel部分,wcf,app-config,configurationmanager,Wcf,App Config,Configurationmanager,我在控制台应用程序中托管了一个简单的WCF服务,我想做的是在控制台上显示app.config信息,例如基址和端点信息,而不使用代码中的硬编码值 这有可能吗?在应用程序对配置的设置方式感兴趣的生产环境中,这似乎是一个合理可行的场景 这是主机代码 class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(ServiceImp.S
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(ServiceImp.ServiceA)))
{
host.Open();
// I would like to display info here
// Console.Writeline ("Service hosted @ baseadress...., endpoint ABC is...");
Console.WriteLine();
Console.WriteLine("Press <ENTER> to terminate Host");
Console.ReadLine();
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
使用(ServiceHost主机=新ServiceHost(类型为(ServiceImp.ServiceA)))
{
host.Open();
//我想在这里显示信息
//Writeline(“服务托管@baseAddress….,端点ABC是…”);
Console.WriteLine();
Console.WriteLine(“按下以终止主机”);
Console.ReadLine();
}
}
}
谷歌搜索似乎只建议使用ConfigurationManager.AppSettings,但这只能访问AppSettings,而不能访问System.ServiceModel内容
提前感谢您从您的控制台应用程序执行以下操作以阅读完整的app.config
XDocument doc = XDocument.Load(Assembly.GetExecutingAssembly().Location +".config");
现在,您将在doc对象中拥有app.config的内容,通过它可以迭代查找system.servicemodel部分并获得所需的值
希望有帮助。通过名称空间提供对配置的访问。但是,如果
ServiceHost
实例已经打开,您也可以通过它访问大多数信息
示例:
// BaseAddress
Console.WriteLine(serviceHost.BaseAddress);
// Endpoints (non-MEX)
foreach (ServiceEndpoint ep in serviceHost.Description.Endpoints)
{
if (serviceHost.BaseAddress.Any(uri => uri.Equals(ep.ListenUri) &&
ep.Contract.ContractType != typeof(IMetadataException))
{
Console.WriteLine("ListenURI: " + ep.ListenUri);
Console.WriteLine(" Name : " + ep.Name);
Console.WriteLine(" Binding: " + ep.Binding.GetType().FullName);
}
}
// List of MEX endpoints:
foreach (ServiceEndpoint ep in serviceHost.Description.Endpoints)
{
if (ep.Contract.ContractType == typeof(IMetadataExchange))
{
Console.WriteLine(ep.ListenUri.ToString());
}
}
只需浏览
ServiceHost
类,特别是Description
属性。如果您想在不使用ServiceHost实例的情况下执行此操作,可以使用以下代码
ServiceModelSectionGroup section = ServiceModelSectionGroup.GetSectionGroup(config);
代码假定您有对应用程序的配置对象的引用。您可以使用WebConfigurationManager或ConfigurationManager对象获取此信息