WCF: Как получить Binding объект из конфигурации

голоса
15

Я хотел бы получить Binding объект из web.config или app.config.

Таким образом, этот код работает:

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

но я хотел бы сделать следующее:

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

Я заинтересован в методе DoSomething (), конечно.

Задан 10/12/2008 в 11:03
источник пользователем
На других языках...                            


5 ответов

голоса
7

Если вы не знаете тип привязки не только во время выполнения, вы можете использовать следующее:

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

Где bindingType типа связывания и endpointConfigName это имя указано в файле конфигурации.

Все включенные привязок обеспечивают конструктор, который принимает endpointConfigurationName в качестве единственного параметра, так что это должно работать для всех из них. Я использовал его для WsHttpBinding и NetTcpBinding без проблем.

Ответил 29/04/2010 в 20:40
источник пользователем

голоса
7

Проверьте это сообщение в блоге от Марка Габарры, он показывает , как перечислить сконфигурированные привязки

Ответил 16/12/2008 в 16:49
источник пользователем

голоса
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");
Ответил 16/12/2008 в 10:20
источник пользователем

голоса
6

Один дерзкий вариант может создать экземпляр с помощью конструктора по умолчанию, чтобы использовать в качестве шаблона:

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

Затем заправить это прочь и повторно использовать его. Любая помощь?

Ответил 10/12/2008 в 12:05
источник пользователем

голоса
4

Этот ответ выполняет запрос на OP и на 100%, извлеченные из этого удивительного поста от Пабло М. Cibraro.

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;
}
Ответил 20/10/2015 в 16:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more