Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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/2/.net/25.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
C# 以编程方式从配置加载不同的端点行为_C#_.net_Wcf_App Config_Endpointbehavior - Fatal编程技术网

C# 以编程方式从配置加载不同的端点行为

C# 以编程方式从配置加载不同的端点行为,c#,.net,wcf,app-config,endpointbehavior,C#,.net,Wcf,App Config,Endpointbehavior,是否可以交换app.config文件中定义的端点的端点行为 基本上,我有一个定义了自定义绑定的单一端点。我从代码中设置WCF代理客户端的端点地址。我想根据端点地址使用不同的端点行为 伪代码: var client = new WcfClient("endpointName", new endpointAddress("https://...")); client.Endpoint.Behaviors.Add(EndpointBehavior.CreateFromConfig("behaviorN

是否可以交换app.config文件中定义的端点的端点行为

基本上,我有一个定义了自定义绑定的单一端点。我从代码中设置WCF代理客户端的端点地址。我想根据端点地址使用不同的端点行为

伪代码:

var client = new WcfClient("endpointName", new endpointAddress("https://..."));
client.Endpoint.Behaviors.Add(EndpointBehavior.CreateFromConfig("behaviorName"));

这(容易)可能吗?我仍然希望在app.config中有我的行为定义,但根据端点的地址动态加载它们。

您可以通过System.ServiceModel.configuration命名空间访问配置。 阅读相应部分并手动构建端点/行为

您还可以创建多个端点并按名称实例化客户端:

您还可以尝试使用配置命名空间中的BehaviorExtensionElement创建行为。 我在这里找到了一个例子:

例如,对于服务器:如果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(IMetadataExchange))
  {
    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());
  }
}

在运行时设置端点:


yourProxy.ChannelFactory.Endpoint.Address=New ServiceModel.EndpointAddress(“someSvcURL”)

WCF是否公开从命名行为节创建端点行为的方法?毕竟,WCF在最初仅从配置构建端点时也会这样做(并且它公开了
*绑定
)的功能。如果添加了更多信息,请查看BehaviorExtensionElement我不能创建一个类似于从配置创建绑定的新行为吗<代码>新建CustomBinding(“bindingname”)。为什么没有新的端点行为(“行为名称”)?我不想修改代码中的行为,我想从配置中加载一个不同的行为。通过ConfigurationManager读取配置值来手动构建它对我来说似乎不太合适(我担心生成的行为可能与WCF生成的行为略有不同,并引入难以跟踪的错误)不,我不想设置端点地址,我想从配置文件中按名称创建EndpointBehavior对象。