我在控制台应用程序中托管了一个简单的WCF服务,我想要做的是在控制台上显示app.config信息,例如基地址和端点信息,而不使用代码中的硬编码值。
这一切都可能吗?在生产环境中,这听起来像是一个相当合理的场景,应用程序对配置的设置方式感兴趣吗?
这是主机代码......
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();
}
}
}
谷歌搜索似乎只建议使用ConfigurationManager.AppSettings,但这只能访问AppSettings而不是System.ServiceModel内容。
提前致谢
答案 0 :(得分:2)
通过System.ServiceModel.Configuration
命名空间提供对配置的访问。但是,如果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
属性。
答案 1 :(得分:0)
从您的控制台应用程序执行以下操作,阅读完整的app.config。
XDocument doc = XDocument.Load(Assembly.GetExecutingAssembly().Location +".config");
现在,您将获得doc对象中app.config的内容,您可以通过它迭代查找system.servicemodel部分并获取所需的值。
希望有所帮助。
答案 2 :(得分:0)
如果您想在没有ServiceHost实例的情况下执行此操作,可以使用以下代码。
ServiceModelSectionGroup section = ServiceModelSectionGroup.GetSectionGroup(config);
代码假定您具有对应用程序的Configuration对象的引用。您可以使用WebConfigurationManager或ConfigurationManager对象来获取它。