C# 以编程方式从配置加载不同的端点行为
是否可以交换app.config文件中定义的端点的端点行为 基本上,我有一个定义了自定义绑定的单一端点。我从代码中设置WCF代理客户端的端点地址。我想根据端点地址使用不同的端点行为 伪代码: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
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对象。