是否可以交换app.config文件中定义的端点的端点行为?
基本上我有一个定义了自定义绑定的端点。从代码我设置WCF代理客户端的端点地址。我想根据端点地址使用不同的端点行为。
伪代码:
var client = new WcfClient("endpointName", new endpointAddress("https://..."));
client.Endpoint.Behaviors.Add(EndpointBehavior.CreateFromConfig("behaviorName"));
这(很容易)可能吗?我仍然希望在app.config中拥有我的行为定义,但是根据端点的地址动态加载它们。
答案 0 :(得分:1)
您可以通过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实例已经打开,您也可以直接从中访问大部分信息
// 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 :(得分:0)
在运行时设置端点:
yourProxy.ChannelFactory.Endpoint.Address =新ServiceModel.EndpointAddress(“someSvcURL”)