none
Acessar <system.serviceModel> no arquivo de configuração com a classe ServiceModelConfigurationSection RRS feed

  • Pergunta

  • Boa Tarde Mestres,

    Estou precisando carregar o conteúdo da sessão <system.serviceModel> para minha classe, onde eu irei realizar diversas manipulações.

    Abaixo a sessão completa.

     <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="TcpConfig" openTimeout="00:01:00" maxReceivedMessageSize="2147483647" />
          </netTcpBinding>
        </bindings>
        <client>
          <endpoint address="net.tcp://localhost/empresa/ClienteService.svc" binding="netTcpBinding" bindingConfiguration="TcpConfig" contract="Br.Com.Empresa.Servicos.Infraestrutura.Contratos.IClienteService" name="clientServiceConfig" />
        </client>
      </system.serviceModel>

    Andei pesquisando sobre a classe ServiceModelConfigurationSection porém não tenho ideia de como fazer isso.

    quarta-feira, 8 de agosto de 2012 18:03

Respostas

Todas as Respostas

  • Amigo, bom dia

    eu não entendi direito sua questão, você já tem um serviço WCF pronto e quer utiliza-lo ouv você está na dúvida de como implementar o serviço ? 


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    quinta-feira, 9 de agosto de 2012 11:30
    Moderador
  • O Serviço já esta implementado e funcionando, estou precisando "Apenas" acessar essa sessão para gravar informações nela, e caso ela não exista tenho que criar conforme as informações mostradas no tópico acima.

    Minha interface WPF vai receber informações do usuário e gravar nessa sessão.

    <client>
          <endpoint address="net.tcp://localhost/empresa/ClienteService.svc" binding="netTcpBinding" bindingConfiguration="TcpConfig" contract="Br.Com.Empresa.Servicos.Infraestrutura.Contratos.IClienteService" name="clientServiceConfig" />
        </client>

    Qualquer ajuda é muuuuito importante, estou muito atrasado com isso. ;)

    quinta-feira, 9 de agosto de 2012 13:18
  • Boa Tarde Mestres,

    Estou precisando carregar o conteúdo da sessão <system.serviceModel> para minha classe, onde eu irei realizar diversas manipulações.

    O Google é seu amigo...

    Read & Write <system.serviceModel> section fom app.config file in C#
    http://kosiara87.blogspot.pt/2011/09/read-write-section-fom-appconfig-file.html

    How to write endpoint information in app.config at runtime WCF?
    http://stackoverflow.com/questions/1108210/how-to-write-endpoint-information-in-app-config-at-runtime-wcf

    Trouble writing programmatic config changes for WCF
    http://stackoverflow.com/questions/2380697/trouble-writing-programmatic-config-changes-for-wcf

    Loading System.ServiceModel configuration section using ConfigurationManager
    http://stackoverflow.com/questions/19589/loading-system-servicemodel-configuration-section-using-configurationmanager

    Abraços,
    Caio Proiete

     


    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    • Marcado como Resposta WillianASantos quinta-feira, 9 de agosto de 2012 14:24
    quinta-feira, 9 de agosto de 2012 13:34
    Moderador
  • Perfeito Caio, 

    Já tinha desistido de procurar no Google, mas o negocio é saber como procurar. :)

    A melhor alternativa achei aqui.

    Segue o código.

     // Automagically find all client endpoints defined in app.config
                    ClientSection clientSection =
                        this._settings.GetSection("system.serviceModel/client") as ClientSection;
    
                    ChannelEndpointElementCollection endpointCollection =
                        clientSection.ElementInformation.Properties[string.Empty].Value as ChannelEndpointElementCollection;
                    List<string> endpointNames = new List<string>();
                    foreach (ChannelEndpointElement endpointElement in endpointCollection)
                    {
                        endpointNames.Add(endpointElement.Name);
                    }

    • Marcado como Resposta WillianASantos quinta-feira, 9 de agosto de 2012 14:25
    • Não Marcado como Resposta WillianASantos quinta-feira, 9 de agosto de 2012 20:29
    quinta-feira, 9 de agosto de 2012 14:24
  • Mais uma duvida,

    Também tenho que criar a sessão caso ela não exista, como posso fazer isso?

    Estou usando WPF e tenho um propriedade Chamada "EnderecoHistoricoCliente", onde guardo o Address.

            public string EnderecoHistoricoCliente
            {

    get

    { ClientSection clientSection = this._settings.GetSection("system.serviceModel/client") as ClientSection; ChannelEndpointElementCollection endpointCollection = clientSection.ElementInformation.Properties[string.Empty].Value as ChannelEndpointElementCollection; if (endpointCollection.Count > 0) { return endpointCollection[0].Address.AbsoluteUri.ToString(); } else { ChannelEndpointElement ep = new ChannelEndpointElement();

    // Isso esta Certo?? ep.Address = new Uri("net.tcp://localhost/peggasus/ClienteService.svc"); ep.Binding = "netTcpBinding"; ep.BindingConfiguration = "TcpConfig"; ep.Contract = "Br.Com.Peggasus.Servicos.Infraestrutura.Contratos.IClienteService"; ep.Name = "clientServiceConfig"; this._settings.Save(ConfigurationSaveMode.Full); ConfigurationManager.RefreshSection("system.serviceModel"); return endpointCollection[0].Address.AbsoluteUri.ToString(); } } set { if (value.Substring(0, 10).Equals("net.tcp://")) { ClientSection clientSection = this._settings.GetSection("system.serviceModel/client") as ClientSection; foreach (ChannelEndpointElement ep in clientSection.Endpoints) { if (ep.Name == "clientServiceConfig") { ep.Address = new Uri(value); } } this._settings.Save(); } else { MessageBox.Show("O endereço informado não é valido, o mesmo deve iniciar com 'net.tcp://'.", "Atenção", MessageBoxButton.OK, MessageBoxImage.Warning); } }

    }

    Mas como não esta no SET ele não altera!!!

    Desculpem tantas duvidas, é que sou iniciante no WCF. :



    quinta-feira, 9 de agosto de 2012 20:26