17

web.config または app.config から Binding オブジェクトを取得したいと考えています。

したがって、このコードは機能します。

wcfTestClient = new TestServiceClient("my_endpoint", Url + "/TestService.svc");

しかし、私は次のことをしたいと思います:

Binding binding = DoSomething();
wcfTestClient = new TestServiceClient(binding, Url + "/TestService.svc");

もちろん、私は DoSomething() メソッドに興味があります。

4

5 に答える 5

10

この回答は OP リクエストを満たし、Pablo M. Cibraro のこの素晴らしい投稿から 100% 抽出されています。

http://weblogs.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;
}
于 2015-10-20T16:58:28.213 に答える
7

Mark Gabarraからのこのブログ投稿をチェックしてください。これは、構成されたバインディングを列挙する方法を示しています。

于 2008-12-16T15:49:41.283 に答える
7

実行時までバインディングのタイプがわからない場合は、次を使用できます。

return (Binding)Activator.CreateInstance(bindingType, endpointConfigName);

ここで、バインディングのタイプの bindingType と endpointConfigName は、構成ファイルで指定された名前です。

含まれているすべてのバインディングは、endpointConfigurationName を唯一のパラメーターとして受け取るコンストラクターを提供するため、これはそれらすべてに対して機能するはずです。問題なく WsHttpBinding と NetTcpBinding に使用しました。

于 2010-04-29T19:40:58.230 に答える
6

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");
于 2008-12-16T09:20:38.230 に答える
6

ちょっとしたオプションの 1 つは、デフォルトのコンストラクターでインスタンスを作成し、テンプレートとして使用することです。

Binding defaultBinding;
using(TestServiceClient client = new TestServiceClient()) {
    defaultBinding = client.Endpoint.Binding;
}

その後、これを押し込んで再利用します。何か助けはありますか?

于 2008-12-10T11:05:36.413 に答える