WCF: Como chegar objeto Binding de configuração

votos
15

Eu gostaria de obter objeto Binding de web.config ou app.config.

Assim, este código funciona:

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

mas eu gostaria de fazer o seguinte:

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

Estou interessado no método DoSomething (), é claro.

Publicado 10/12/2008 em 11:03
fonte usuário
Em outras línguas...                            


5 respostas

votos
7

Se você não sabe o tipo da ligação até a execução, você pode usar o seguinte:

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

Onde bindingType do tipo de ligação e endpointConfigName é o nome especificado no arquivo de configuração.

Todas as ligações incluídas fornecer um construtor que leva o endpointConfigurationName como o único parâmetro para isso deve funcionar para todos eles. Eu usei-o para WSHttpBinding e NetTcpBinding sem problemas.

Respondeu 29/04/2010 em 20:40
fonte usuário

votos
7

Confira este post de Mark Gabarra, ele mostra como enumerar as ligações configuradas

Respondeu 16/12/2008 em 16:49
fonte usuário

votos
6

Você pode instanciar um obrigatório dar um nome de configuração de ligação de App.config / Web.config.

http://msdn.microsoft.com/en-us/library/ms575163.aspx

Inicializa uma nova instância da classe WSHttpBinding com uma ligação especificada pelo seu nome de configuração.

O exemplo a seguir mostra como inicializar uma nova instância da classe WSHttpBinding com um argumento string.

// Set the IssuerBinding to a WSHttpBinding loaded from config
b.Security.Message.IssuerBinding = new WSHttpBinding("Issuer");
Respondeu 16/12/2008 em 10:20
fonte usuário

votos
6

Uma opção atrevido poderia ser a de criar uma instância com o construtor padrão, para usar como modelo:

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

Em seguida, guarde esta distância e reutilizá-lo. Qualquer ajuda?

Respondeu 10/12/2008 em 12:05
fonte usuário

votos
4

Esta resposta satisfaz o pedido OP e é 100% extraído dessa incrível post de Pablo M. Cibraro.

http://weblogs.asp.net/cibrax/getting-wcf-bindings-and-behaviors-from-any-config-source

Este método dá-lhe secção de ligação da configuração.

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;
}

Este método dá-lhe o real Bindingobjeto que você está precisando desesperadamente.

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;
}
Respondeu 20/10/2015 em 16:58
fonte usuário

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