none
Loop Para ler todas as Service References RRS feed

  • Pergunta

  • Olá,

     

    Alguem sabe como eu posso fazer um loop que me traga todos os objetos das Service References?

    Por exemplo:

     

    Suponha que existam as referencias: Service1Reference, Service2Reference... ServiceNReference,

    Eu queria algo tipo um loop assim:

     

    for(int i = 0; i < N; i++)

    {

    List<references>.Add(Service[i]ReferenceClient);

    }

    Alguem sabe como posso fazer?

    segunda-feira, 2 de agosto de 2010 19:26

Respostas

  • Boas Thiago,

    Como todos os serviços são referenciados no arquivo de configuração do lado do cliente, você pode fazer algo como:

    Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    ServiceModelSectionGroup wcfConfig = ServiceModelSectionGroup.GetSectionGroup(cfg);

    foreach (ChannelEndpointElement item in wcfConfig.Client.Endpoints)
    {
        Console.WriteLine("Address: {0} - Binding: {1} - Contract: {2}",
            item.Address, item.Binding, item.Contract);
    }

     


    http://www.israelaece.com
    • Marcado como Resposta Thiago Chaves quarta-feira, 4 de agosto de 2010 14:35
    segunda-feira, 2 de agosto de 2010 19:59
    Moderador
  • Boas Thiago,

    Referencia o assembly System.Configuration.dll na sua aplicação.
    http://www.israelaece.com
    • Marcado como Resposta Thiago Chaves quarta-feira, 4 de agosto de 2010 14:35
    segunda-feira, 2 de agosto de 2010 20:15
    Moderador
  • Boas Thiago,

    Sabendo como percorrer os endpoints, você pode criar o proxy (ou o ChannelFactory<T>) diretamente, informando em seus construtores os parâmetros que estão sendo extraídos do arquivo de configuração.

    Mas se quer a flexibilidade de não precisar mencionar a Url do serviço no clientes, então você pode recorrer ao WS-Discovery: http://www.israelaece.com/post/WCF-e28093-WS-Discovery.aspx


    http://www.israelaece.com
    • Marcado como Resposta Thiago Chaves sexta-feira, 6 de agosto de 2010 13:26
    quarta-feira, 4 de agosto de 2010 19:58
    Moderador

Todas as Respostas

  • Boas Thiago,

    Como todos os serviços são referenciados no arquivo de configuração do lado do cliente, você pode fazer algo como:

    Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    ServiceModelSectionGroup wcfConfig = ServiceModelSectionGroup.GetSectionGroup(cfg);

    foreach (ChannelEndpointElement item in wcfConfig.Client.Endpoints)
    {
        Console.WriteLine("Address: {0} - Binding: {1} - Contract: {2}",
            item.Address, item.Binding, item.Contract);
    }

     


    http://www.israelaece.com
    • Marcado como Resposta Thiago Chaves quarta-feira, 4 de agosto de 2010 14:35
    segunda-feira, 2 de agosto de 2010 19:59
    Moderador
  • Olá Israel,

     

    Esse loop é para ficar do lado do cliente mesmo, é para listar os servidores para o cliente.

     

    Estou testando.

     

    Obrigado.

    • Marcado como Resposta Thiago Chaves quarta-feira, 4 de agosto de 2010 14:35
    • Não Marcado como Resposta Thiago Chaves quarta-feira, 4 de agosto de 2010 14:35
    segunda-feira, 2 de agosto de 2010 20:02
  • Olá Israel, desculpa, eu sou iniciante em C#,

    não estou encontrando "Configuration" nem "ConfigurationManager",

    Qual seria o namespace?

     

    Obrigado.

     

    segunda-feira, 2 de agosto de 2010 20:05
  • Boas Thiago,

    Referencia o assembly System.Configuration.dll na sua aplicação.
    http://www.israelaece.com
    • Marcado como Resposta Thiago Chaves quarta-feira, 4 de agosto de 2010 14:35
    segunda-feira, 2 de agosto de 2010 20:15
    Moderador
  • Muito obrigado.
    quarta-feira, 4 de agosto de 2010 14:35
  • Israel, como vai?

     

    Estou com outra dúvida, como eu poderia fazer para listar todas as service references?

    Eu tenho um client que precisa se conectar com mais de um server, pois na falta de um lá estará outro.

    Você sabe como eu posso fazer isso?

     

    Muito obrigado pela ajuda.
    quarta-feira, 4 de agosto de 2010 18:17
  • Boas Thiago,

    Sabendo como percorrer os endpoints, você pode criar o proxy (ou o ChannelFactory<T>) diretamente, informando em seus construtores os parâmetros que estão sendo extraídos do arquivo de configuração.

    Mas se quer a flexibilidade de não precisar mencionar a Url do serviço no clientes, então você pode recorrer ao WS-Discovery: http://www.israelaece.com/post/WCF-e28093-WS-Discovery.aspx


    http://www.israelaece.com
    • Marcado como Resposta Thiago Chaves sexta-feira, 6 de agosto de 2010 13:26
    quarta-feira, 4 de agosto de 2010 19:58
    Moderador
  • Olá Israel,

     

    Fiz mais ou menos como você falou.

    Eu criei contratos iguais em todos os servers, ai, no client, eu só precisei trocar

    o endereço, porque de resto era igual.

     

    Muito obrigado pela ajuda.

    sexta-feira, 6 de agosto de 2010 13:26