none
Dúvida em uri dinamica RRS feed

  • Pergunta

  •  

    Pessoal seguinte, tenho um metodo que lista algumas coisas dos clientes da rede. Terei que executá-lo algumas vezes no dia e em todas as máquinas. Hoje o método está assim, mas futuramente ele vai salvar todos os dados obtidos de todos os computadores em um arquivo texto:

     

    Code Block

    private void retonaLista()

    {

    listBox1.Items.Clear();

    using (proxy.MicroClient mic = new Cliente.proxy.MicroClient())

    {

    proxy.clnMicro micro = new Cliente.proxy.clnMicro();

    micro = mic.getMicro(txtPesquisa.Text.Trim());

    txtId.Text = micro.Id.ToString();

    txtMicro.Text = micro.Micro;

    txtIp.Text = micro.Ip;

    foreach (Cliente.proxy.clnSoft so in micro.Software)

    {

    listBox1.Items.Add(so.Soft + " - " + so.Path);

    }

    }

    }

     

    Porém o método acima utiliza um proxy pre-configurado que se conecta a apenas uma máquina que está expondo o serviço. Eu teria que mudar o IP das máquinas no endpointadress para que a rotina percorresse todos os micros da rede.

     

    Como posso fazer isso via programação, pois os números de ip e nomes das máquinas eu tenho no bd, ai era só concatenar com o endereço (ex: "net.tcp://localhost:5000/Micro" ) colocando o ip ou o nome do computador. Só não sei como mudar esse IP ou nome em tempo de execução dentro do laço foreach...

     

    O mais perto que consegui chegar foi isso:

     

    Code Block

    private void button1_Click(object sender, EventArgs e)

    {

    listBox1.Items.Clear();

    ServiceEndpoint end = new ServiceEndpoint(ContractDescription.GetContract(typeof(IMicro)),new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:5000/Micro"));

    ChannelFactory<IMicro> factory = new ChannelFactory<IMicro>(end);

    IMicro mic = factory.CreateChannel();

    using (mic as IDisposable)

    {

    clnMicro micro = new clnMicro();

    micro = mic.getMicro(txtPesquisa.Text.Trim());

    txtId.Text = micro.Id.ToString();

    txtMicro.Text = micro.Micro;

    txtIp.Text = micro.Ip;

    foreach (clnSoft so in micro.Software)

    {

    listBox1.Items.Add(so.Soft + " - " + so.Path);

    }

    }

    }

     

     

    Acho que o caminho é esse, mais não consegui mudar o Uri em tempo de execução...

     

    Grato

    Sanses

    sábado, 3 de novembro de 2007 06:40

Respostas

  • Ola Sanses,

    Se entendi bem, você poderia tentar da seguinte forma:

    Code Block
    Servico.Clientes proxy = new Servico.Clientes();
    proxy.Endpoint.Address = new EndpointAddress("net.tcp://localhost:5000/Micro");

     

     

    sábado, 3 de novembro de 2007 11:41
    Moderador
  • Muito obrigado pela força Israel, ficou perfeito

     

    []'s Sanses

    domingo, 4 de novembro de 2007 20:53

Todas as Respostas