是否有基于给定端点地址创建最基本WCF绑定的快捷方式?
端点:net.tcp:// localhost:7879 / Service.svc
而不是大块的if语句......
Binding binding = null;
if (endpoint.StartsWith("net.tcp"))
{
binding = new NetTcpBinding();
}
else if (endpoint.StartWith("http"))
{
binding = new WsHttpBinding();
}
.
.
.
框架库中是否有一个快捷方式可以帮我找到我找不到的快捷方式,或者因为它不公开存在而无法找到它?
答案 0 :(得分:2)
.NET 4中的WCF会自动为您执行此操作 - 该功能称为默认端点。
在此处阅读所有WCF 4的新功能:A Developer's Introduction to WCF 4
默认端点大约是文章中的第二个左右段落。
答案 1 :(得分:2)
虽然WCF 4支持默认服务端点,但它不支持默认客户端端点。不幸的是,框架用于创建默认绑定的方法是内部的,但它背后的逻辑很简单,所以我重新实现它在客户端使用(跳过原始缓存和跟踪逻辑):
private static Binding GetBinding(string scheme)
{
// replace with ConfigurationManager if not running in ASP.NET
var configuration = WebConfigurationManager.OpenWebConfiguration(null);
var sectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);
Debug.Assert(sectionGroup != null, "system.serviceModel configuration section is missing.");
var mapping = sectionGroup.ProtocolMapping.ProtocolMappingCollection
.OfType<ProtocolMappingElement>()
.SingleOrDefault(e => e.Scheme == scheme);
if (mapping == null)
throw new NotSupportedException(string.Format("The URI scheme {0} is not supported.", scheme));
var bindingElement = sectionGroup.Bindings.BindingCollections.Single(e => e.BindingName == mapping.Binding);
var binding = (Binding) Activator.CreateInstance(bindingElement.BindingType);
var bindingConfiguration = bindingElement.ConfiguredBindings.SingleOrDefault(e => e.Name == mapping.BindingConfiguration);
if (bindingConfiguration != null)
bindingConfiguration.ApplyConfiguration(binding);
return binding;
}
没有任何配置,此代码等同于问题中的代码,但您可以在system.serviceModel/protocolMapping
部分中选择和配置绑定。
答案 2 :(得分:1)
在深入研究问题之后,我并不需要手动阅读配置。相反,我需要发送绑定信息以及地址和合同。
http://www.codeproject.com/KB/WCF/WCFDiscovery.aspx?display=PrintAll
我已经构建了一个序列化绑定信息的简单组件。