WCFを使用しているサーバー&クライアントソリューションがあります。クライアントは実行時にURLに関するサービスをアクティブなサーバーに要求し、これを設定できるようにするためにChannelFactoryを使用します。しかし、私はまだconfigファイルから他のすべてのWCF設定を使用する必要があります。これは私がそれを行う方法です。設定ファイルからの設定でWCF channelfactory?
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;
}
}
問題は、私はこのようなエンドポイントの一部で使用されている2 BehaviorExtensionsを得たことです。
<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>
質問は私がclientSection.Endpointsからどのように読み取ったかです。 channelFactoryに設定しますか?私は、このように手動で、その後作成することができることを知っている:
serviceEndpoint.EndpointBehaviors.Add(new ProtoEndpointBehavior());
serviceEndpoint.EndpointBehaviors.Add(new CustomMessageInspectorBehavior());
しかし、これは、ハードコーディングされた静的になり、それは私が設定からそれを変更できるようにする必要があり、すべてのエンドポイントに適用されます。
おめでとうございます。しかし、あなたの答えはsomの例と説明だけで役に立ちます。 –