首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式从配置加载不同的EndpointBehavior

以编程方式从配置加载不同的EndpointBehavior
EN

Stack Overflow用户
提问于 2013-09-23 16:38:07
回答 2查看 2.1K关注 0票数 0

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

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

伪码:

代码语言:javascript
复制
var client = new WcfClient("endpointName", new endpointAddress("https://..."));
client.Endpoint.Behaviors.Add(EndpointBehavior.CreateFromConfig("behaviorName"));

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

EN

回答 2

Stack Overflow用户

发布于 2013-09-23 16:45:05

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

您还可以创建多个端点并按名称实例化客户端:http://msdn.microsoft.com/en-us/library/ms751515.aspx

您还可以尝试从配置命名空间使用BehaviorExtensionElement来尝试创建行为。我在这里找到了一个示例:http://weblogs.asp.net/cibrax/archive/2010/05/11/getting-wcf-bindings-and-behaviors-from-any-config-source.aspx

例如,对于服务器:如果ServiceHost实例已经打开,则还可以直接从该实例访问大多数信息

代码语言:javascript
复制
// 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());
  }
}
票数 1
EN

Stack Overflow用户

发布于 2013-09-24 03:18:13

在运行时设置端点:

yourProxy.ChannelFactory.Endpoint.Address =新建ServiceModel.EndpointAddress("someSvcURL")

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18954946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档