Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 在代码中访问App.Config文件的System.ServiceModel部分_Wcf_App Config_Configurationmanager - Fatal编程技术网

Wcf 在代码中访问App.Config文件的System.ServiceModel部分

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

我在控制台应用程序中托管了一个简单的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();
        }
    }
}
类程序
{
静态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对象获取此信息