WCF:どのような構成からBindingオブジェクトを取得します
-
21-08-2019 - |
質問
私は、web.configファイルまたはapp.configをからBindingオブジェクトを取得したいと思います。
だから、このコードは動作します:
wcfTestClient = new TestServiceClient("my_endpoint", Url + "/TestService.svc");
が、私は次の操作を実行したいと思います:
Binding binding = DoSomething();
wcfTestClient = new TestServiceClient(binding, Url + "/TestService.svc");
私はもちろん、doSomethingの()メソッドに興味を持っています。
解決
あなたはApp.configファイル/ Web.configファイルからのバインディング構成名を与える結合インスタンス化することができます。
http://msdn.microsoft.com/en-us/library /ms575163.aspxする
その設定名で指定されたバインディングでWSHttpBindingクラスの新しいインスタンスを初期化します。
次の例では、新しいインスタンスを初期化する方法を示しています 文字列引数でWSHttpBindingクラスます。
// Set the IssuerBinding to a WSHttpBinding loaded from config b.Security.Message.IssuerBinding = new WSHttpBinding("Issuer");
他のヒント
マークGabarraからこののブログ記事をご覧ください、それが設定されたバインディングを列挙する方法を示しています。
あなたは実行時までバインディングの種類がわからない場合、あなたが使用することができ、以下ます:
return (Binding)Activator.CreateInstance(bindingType, endpointConfigName);
どこのタイプのたBindingType結合とendpointConfigNameは、設定ファイルで指定の名前です。
すべて含まバインディングはそう、これはそれらのすべてのために働く必要が唯一のパラメータとしてendpointConfigurationNameを取るコンストラクタを提供します。私は問題なくWsHttpBindingとNetTcpBindingのためにそれを使用しています。
のこの答えはOPの要求を満たし、100%パブロM. Cibraroからこの素晴らしいポストから抽出される。の
ます。http://ウェブログ。 asp.net/cibrax/getting-wcf-bindings-and-behaviors-from-any-config-sourceする
この方法は、あなたの設定の結合部分を提供します。
private BindingsSection GetBindingsSection(string path)
{
System.Configuration.Configuration config =
System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(
new System.Configuration.ExeConfigurationFileMap() { ExeConfigFilename = path },
System.Configuration.ConfigurationUserLevel.None);
var serviceModel = ServiceModelSectionGroup.GetSectionGroup(config);
return serviceModel.Bindings;
}
この方法は、あなたが必死に必要とされている実際のBinding
オブジェクトを与えます。
public Binding ResolveBinding(string name)
{
BindingsSection section = GetBindingsSection(path);
foreach (var bindingCollection in section.BindingCollections)
{
if (bindingCollection.ConfiguredBindings.Count > 0
&& bindingCollection.ConfiguredBindings[0].Name == name)
{
var bindingElement = bindingCollection.ConfiguredBindings[0];
var binding = (Binding)Activator.CreateInstance(bindingCollection.BindingType);
binding.Name = bindingElement.Name;
bindingElement.ApplyConfiguration(binding);
return binding;
}
}
return null;
}
一つ生意気なオプションは、テンプレートとして使用するために、デフォルトのコンストラクタでインスタンスを作成するかもしれません
Binding defaultBinding;
using(TestServiceClient client = new TestServiceClient()) {
defaultBinding = client.Endpoint.Binding;
}
次に、離れて、これを挟むと、それを再利用。すべてのヘルプ?