Ich habe einen Server & Client-Lösung, die WCF verwenden. Der Client wird zur Laufzeit einen Dienst über die URL zu einem aktiven Server fragen und um dies einstellen zu können, verwende ich ChannelFactory. Ich muss jedoch immer noch alle anderen WCF-Einstellungen aus der Konfigurationsdatei verwenden. Dies ist, wie ich es tun:WCF channelfactory mit Einstellungen aus der Konfigurationsdatei?
var clientSection = ConfigurationManager.GetSection("system.serviceModel/client") as ClientSection;
var address = string.Empty;
for(int i = 0; i < clientSection.Endpoints.Count; i++)
{
if(clientSection.Endpoints[i].Name == endpointConfigurationName)
{
var endpointAddress = new EndpointAddress(clientSection.Endpoints[i].Address.ToString());
var netHttpBinding = new NetHttpBinding(clientSection.Endpoints[i].BindingConfiguration);
var serviceEndpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(T)), netHttpBinding, endpointAddress);
var channelFactory = new ChannelFactory<T>(serviceEndpoint);
break;
}
}
Das Problem ist, dass ich 2 BehaviorExtensions bekam, die von einigen der Endpunkte wie diese verwendet werden.
<services>
<endpoint binding="netHttpBinding" behaviorConfiguration="protoEndpointBehavior" address="BinaryHttpProto" bindingNamespace="http://MyApp.ServiceContracts/2007/11" contract="MyApp.ServiceContracts.IMyAppClientService" />
</services>
<behaviors>
<endpointBehaviors>
<behavior name="protoEndpointBehavior">
<protobuf />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="protobuf" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net, Version=2.0.0.668, Culture=neutral, PublicKeyToken=257b51d87d2e4d67" />
</behaviorExtensions>
</extensions>
Die Frage ist, wie lese ich das aus dem clientSection.Endpoints? und setzt es auf der channelFactory? Ich weiß, dass ich dann manuell wie dies schaffen könnte:
serviceEndpoint.EndpointBehaviors.Add(new ProtoEndpointBehavior());
serviceEndpoint.EndpointBehaviors.Add(new CustomMessageInspectorBehavior());
Aber dann wird dies ein hart codiert statisch sein und es wird an alle Endpunkte anzuwenden, muss ich es ändern aus der Config können.
Herzlichen Glückwunsch. Aber trotzdem ist Ihre Antwort nur mit Beispiel und Erklärung nützlich. –