Posts
Carlos,
Por que ao invés de setar o caminho de log dentro do app.config, por que não o faz num classe dentro de sua própria aplicação? Assim sendo, é so usar o Server.MapPath(~/PastaLog/Erro.txt)
Abraços
Att
Luiz Maia
31/12/2009
Carlos Nogueira
Então, a minha dúvida é justamente essa, de forma dinâmica, poder alterar esse elemento do Enterprise Library que você seta o arquivo de log no app.config. Como poderia obter essa informação (o elemento do app.config) e alterar o mesmo?
Carlos,
Como vc configurou o recurso do Log, foi via Wizard, ou manualmente?
03/01/2010
Carlos Nogueira
Eu utilizei o Wizard, aquele que após que você instala, você consegue acessar pelo menu Iniciar >> Programas >> Enterprise Library, sabe?
Oi Carlos,
Pelo que achei, vc pode tentar fazer o seguinte para modificar o aap.config em runtime:
var path = System.IO.Path.Combine(Environment.CurrentDirectory, "EntLib.config");
var xd = XDocument.Load(path);
var x = (from z in xd.Root.Elements("loggingConfiguration").Elements("logFilters").Elements() where (z.Attribute("name").Value == "Priority Filter") select z).SingleOrDefault();
x.Attribute("minimumPriority").Value = 1; // Change this value...
x.Attribute("maximumPriority").Value = 5; // ... and this one to specify the range you want to log.
xd.Save(path);
No exemplo acima, são alterados alguns atributos, mas não o da pasta do arquivo, alterei este e tente em sua aplicação. Os atributos alterados acima são os seguintes:
<configuration>
...
<loggingConfiguration name="Logging Application Block" tracingEnabled="true"
defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
...
<logFilters>
<add minimumPriority="1" maximumPriority="10" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Priority Filter" />
...
</loggingConfiguration>
</configuration>
Para isto vc deve colocar as configurações do EL num arquivo separado, por exemplo:
<configuration>
<configSections>
<section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<enterpriseLibrary.ConfigurationSource selectedSource="EntLib Config">
<sources>
<add name="EntLig Config" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
filePath="EntLib.config" />
</sources>
</enterpriseLibrary.ConfigurationSource>
</configuration>
Para maiores explicações, de uma olhada no site da Microsoft: http://msdn.microsoft.com/en-us/library/dd203211.aspx
Abraços e aguardo seu retorno dizendo que funcionou, ok?
Att
Luiz Maia
05/01/2010
Carlos Nogueira
Ok,
Eu vou fazer os testes e lhe informo se funcionou.
Obrigado!
Ok Carlos, fico aguardando então...
Abraços
Att
Luiz Maia
18/01/2010
Carlos Nogueira
Olha, nas tentativas iniciais que fiz, não consegui obter o nome do caminho. Bem, posso tentar mais algumas coisas, se depois precisar reabrir o post, pode fazer sem nenhum problema?
Sim Carlos, pode reabrir o post quando quiser, ok?
Fico no aguardo
Abraços
Att
Luiz Maia
03/02/2010
Carlos Nogueira
Oi Luiz! Tudo bem?
Então, decidi reabrir esse post. Sobre a minha dúvida, consegui solucionar com a lógica que você havia enviado, porém, fiz da maneira que segue abaixo:
xd.Root.Elements("loggingConfiguration").Elements("listeners").Elements().ElementAt(0).FirstAttribute.Value
Com isso, ele já me traz automaticamente o caminho do arquivo de log, e pela mesma propriedade Value, consigo setar esse caminho em tempo de execução. Então ao usar uma instância da classe System.XML.Linq.XDocument com método Save(), atende ao que preciso.
O que ocorre é que, eu uso o Enterprise Library para criptografar o app.config, e decidi criptografar ele por completo, todas as seções. Desta maneira, quando ele tentou enxergar o elemento "listeners" do elemento "loggingConfiguration", não conseguiu, já que com o arquivo criptografado, mudou o xml do app.config.
Com exceção da idéia de retirar a criptografia da seção loggingConfiguration, existe mais alguma alternativa que eu possa utilizar para solucionar esse problema?
Fico no aguardo e obrigado pela atenção!
Ola Carlos,
Seguinte, eu atualmente trabalho numa instituição Bancária, aqui adotamos o Enterprise Library também nos projetos .net.
Só que temos uma área para segurança, outra para arquitetura e etc...
Mas o que fazemos aqui é o seguinte:
Temos 3 ambientes: Desenvolvimento, homologação e Produção
O web.config de desenvolvimento não pe criptografado.
Assim que é gerado a versão de homologação ou de produção, apenas mudamos um parametro no web. config apontando para um arquivo xml.
Este arquivo XML é criptografado quanto à string de conexão.
Você pode usar este recurso tb.
Segue um exemplo:
Veja aqui um trecho do arquivo de configuração, no caso abaixo, apontando para testes:
<mbApplicationConfigurationManagement defaultSection="Testes">
<configSection name="Producao">
<configCache enabled="true" refresh="* * * * *"/>
<configProvider assembly="MB.ConfigurationManagement,Version=2.2.0.0,Culture=neutral,PublicKeyToken=805a4b43124d7ae0" type="MB.ConfigurationManagement.Storage.XmlFileStorage" path="D:\Intranet_WS\MB.Web.Services.WSG.Proposta.Captacao\bin\ApplicationConfigProducao.xml" signed="true" encrypted="true"/>
<protectionProvider assembly="MB.ConfigurationManagement,Version=2.2.0.0,Culture=neutral,PublicKeyToken=805a4b43124d7ae0" type="MB.ConfigurationManagement.DataProtection.BCLDataProtection" hashKey="MyXuEd6f+go=" initializationVector="ou95G2/WziI=" symmetricKey="VToaqZjp8C27V90oSmT/CF+afvRGClc9"/>
</configSection>
<configSection name="Homologacao">
<configCache enabled="true" refresh="* * * * *"/>
<configProvider assembly="MB.ConfigurationManagement,Version=2.2.0.0,Culture=neutral,PublicKeyToken=805a4b43124d7ae0" type="MB.ConfigurationManagement.Storage.XmlFileStorage" path="D:\Intranet_WS\MB.Web.Services.WSG.Proposta.Captacao\bin\ApplicationConfigHomologacao.xml" signed="true" encrypted="true"/>
<protectionProvider assembly="MB.ConfigurationManagement,Version=2.2.0.0,Culture=neutral,PublicKeyToken=805a4b43124d7ae0" type="MB.ConfigurationManagement.DataProtection.BCLDataProtection" hashKey="MyXuEd6f+go=" initializationVector="ou95G2/WziI=" symmetricKey="VToaqZjp8C27V90oSmT/CF+afvRGClc9"/>
</configSection>
<configSection name="Testes">
<configCache enabled="true" refresh="* * * * *"/>
<configProvider assembly="MB.ConfigurationManagement,Version=2.2.0.0,Culture=neutral,PublicKeyToken=805a4b43124d7ae0" type="MB.ConfigurationManagement.Storage.XmlFileStorage" path="E:\MERCANTIL\WSG\WEBSERVICES\MB.Web.Services.WSG.Proposta.Captacao\bin\ApplicationConfigTestes.xml" signed="false" encrypted="false"/>
</configSection>
</mbApplicationConfigurationManagement>
<appSettings>
Agora segue os arquivos XML:
- <configuration>
- <Homologacao>
<signature>ZT1CCSpAXNDL3li6WYFcuUtJw0M=</signature>
<encryptedData>C6sxAEZaeW6jW9H6fYB3TxfQxq4jbCJL3a/FEC0I0JmxGZtmgwrLzxwQYGCoYGomJIYFjSc8wPjDq14GaN/S1FECp+Vx7zRtEDTgcBuBkyZLOCvF/HPaTjJ0nSYy+Wis/FTgzYXiUSLMCC7yO4eP5JDj8t5SqjWiFOz/4MLT/kFG/53/yzoLWieA0czMBGy36uS0ec/YiskafCCTbtEA9zoAzovrEddaZ2TO2KwEdmEmPUY1bhmz4u/Y++pjcT4HboDqrlcSewXopRc0BZdoS1a1Fgh0ovXXpOU5CBLCTnJh1rVUjwyrFAWl8ThZldJwdIo9VHC05LCPWeRuXpAxc723Hgpjkv8nJY6mGvy5m/bSUhKQM+du4bRDCduVdtLwii14duS6jGzmnCR9ORfOYZUhHg0QMr4MDYCdKVmENanTEkv14S1LAu0SHB9G7odDAp4wuiOKAStLXAx7MNAzIAKlhHIxyQ8gi3syUrcyA7m8RQVVyPZLOGdR6YW5u/QdUv5EbsBveYmK3BxsYzZb1n1+FOx+ILnQj66skOHGGYH5GsYh+d2obiboNvXYHcBTDn+gaUqNVoaFYXmtaipPXrb+QrbhgrPz6FC2g0vkV9SDp1z2nJiqynmQufzrWu8R5XOsfgv2K3A=</encryptedData>
</Homologacao>
</configuration>
Espero que entenda, pois o processo é bem complicado de implementar.
Mas basicamente o que vai fazer é criar 3 arquivos xml com as conexões e criptografas apenas os dos ambientes de Homologação e Produção, sacou?
Assim, seu arquivo de configuração não tem necessidade de criptografia.
É seguro? É, pois é utilizado num ambiente bancário onde segurança é primordial.
Qualquer coisa te mando uma aplicação pequena de teste, ok?
Aguardo retorno
Att
Luiz Maia
03/02/2010
Carlos Nogueira
Oi Luiz,
Eu entendi a lógica dos ambientes para criptografia das informações do banco de dados, é interessante! Caso você possa enviar um projeto de teste como mencionou no post anterior para eu analisar melhor, fico agradecido.
Então, aqui onde eu trabalho, não sei se segue a mesma linha do local que você trabalha, mas eu tenho que cuidar da segurança, da arquitetura, da manutenção, novos projetos, e assim vai... rs...
Na verdade aqui não tem nada disso de criptografia de arquivo de configuração, houve um turn over alto onde saiu todos da equipe, eu entrei, me deparei com a situação aqui (nada fácil) e decidi tentar implementar algumas práticas que vejo para desenvolvimento de projetos em .net.
No meu caso, inicialmente, posso deixar o arquivo de configuração sem a criptografia daquela seção, que não tem crise, protegendo o AppSettings e o ConnectionString, já é uma grande ajuda.
Aqui como estou trabalhando com um windows application, faço uso de um app.config, e na minha máquina roda as mil maravilhas. Porém, quando fui distribuir no ambiente de homologação, não consegui executar a aplicação de jeito nenhum. Para testes, decidi mandar o arquivo descriptografado no qual a aplicação voltou a funcionar.
Desta forma, para testes, no ambiente de homologação, decidi instalar o Enterprise Library, e após selecionar o arquivo de configuração, para a seção "Data Access Application Block", no atributo "ProtectionProvider" eu mudei para opção "RsaProtectedConfigurationProvider". Ao tentar salvar, o Enterprise Library enviou uma mensagem de erro, que segue abaixo:
"
Falha ao criptografar a seção "connectionStrings" usando o provedor RsaProtectedConfigurationProvider. Mensagem de erro do provedor. O objeto já existe.
"
Mas se eu escolher a opção "DataProtectionConfigurationProvider", o Enterprise Library consegue salvar a alteração normalmente e minha aplicação executa normalmente no ambiente de homologação. Você sabe de alguma explicação para isso, e que eu possa distribuir o arquivo de configuração fazendo uso da criptografia Rsa?
03/02/2010
Carlos Nogueira
Oi Luiz,
Sobre o último post que escrevi da opção do "DataProvider" que havia funcionado, esquece, rs... No momento que tentei efetuar acesso a aplicação, gerou mesmo problema para descriptografar a chave.
Acho que o segredo para solucionar o problema está em gerar a tal chave e disponibilizar junto com a aplicação. Pelo que li, para tal situação (em que vai ser disponibilizado uma aplicação desktop para vários lugares) o mais indicado é utilizar a criptografia RSA, que posso fazer uma vez na minha máquina e disponbilizar para todo mundo.
Só acho que por dentro da aplicação terei que executar um comando para registrar essa chave nas máquinas clientes, estou certo?
E você sabe como gerar essa chave para arquivo app.config? Só consigo achar exemplo para arquivo web.config.
Fico no aguardo, e obrigado pela atenção!
Esta chave que vc esta falando deve ser o SSL (security socket layer) do proprio browser, correto?
Se for, ele se existe mesmo para aplicações web, onde dentro do ambiente do HTTPS todos os dados trafegam criptografados.
Vou analisar outra solução e posto aqui, ok?
Abraços
Att
Luiz Maia