, 그것은 기본 클라이언트 엔드 포인트를 지원하지 않습니다. 불행하게도 (원 캐싱 및 추적 논리를 건너 뛰는) 기본 바인딩을 생성하는 프레임 워크에 의해 사용되는 방법은 내부 있습니다,하지만 난 클라이언트 측에서 사용하도록 다시 구현 그래서 그 뒤에 논리는 간단하다
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
섹션에서 바인딩을 선택하고 구성 할 수 있습니다.
예, 어떻게 그 동작을 모방합니까? –
.NET 4로 업그레이드 할 수 없습니까? 그렇다면 아무것도 모방 할 필요가 없을 것입니다 ... WCF 나 .NET에서 당신이 찾고있는 것을 할 수있는 것을 모릅니다. 만약 당신이'if' 문의 aseries로 살아야 할 것 같아요. .NET 4로 업그레이드 할 수없는 한 오래 –