terça-feira, 30 de abril de 2013

The remote server returned an unexpected response: (417) Expectation failed


Hoje tive um problema muito doido. Abri o VS2012 e quando fui tentar baixar algumas extensões me apareceu um erro estranho. Ele não conectava e não deu muitos detalhes do erro. Apenas a mensagem abaixo:

The remote server returned an unexpected response: (417) Expectation failed

Depois de algumas pesquisas achei a solução. Basta alterar o arquivo devenv.exe.config ques esta no caminho Microsoft Visual Studio 11.0\Common7\Ide dentro de program files (x86).

Basta fazer a alteração abaixo

Disso:

1
2
3
<settings>
     <ipv6 enabled="true"/>
</settings>
Para isso:
?
1
2
3
4
<settings>
     <ipv6 enabled="true"/>
     <servicePointManager expect100Continue="false"/>
</settings>


Com isso teremos o problema resolvido e já podemos baixar as extensões!!!!

Até a próxima

segunda-feira, 29 de abril de 2013

Utilizando LINQ com arquivos XML

Saber trabalhar com arquivos XML é muito importante. Na plataforma .Net tem crescido cada vez mais a utilização deste tipo de arquivo. Vamos algumas definições sobre XML:

“XML (Extensible Markup Language) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais. É um dos subtipos da SGML (acrônimo de Standard Generalized Markup Language, ou Linguagem Padronizada de Marcação Genérica) capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade de compartilhamento de informações através da internet.”

Peguei a definição de um site de desenvolvimento. É um resumo simples do que significa. Não vou aprofundar sobre o assunto, pois não é o foco do artigo. 

Podemos utilizar arquivos XML para varias situações. Armazenar dados, arquivos de configuração, compartilhar dados entre sistemas em diferentes plataformas e etc. 



Uma breva definição de Linq é:
“Um set de recursos introduzidos no Visual Studio 2008 que estende as poderosas capacidades de consulta SQL para as linguagens C# e Visual Basic. O LINQ introduz patterns facilmente aprendidos para consultar e atualizar dados, e uma tecnologia que pode ser estendida para suportar potencialmente qualquer tipo de armazenamento de dados.”

No artigo falaremos especificamente de LINQ to XML. Não entrarei em detalhes sobre LINQ. No site DevMedia tem um excelente artigo que explica bem essa parte teórica
http://www.devmedia.com.br/post-22769-Introducao-ao-LINQ.html

O LINQ to XML é um provedor de dados que faz parte do namespace System.Xml.LINQ que foi implementado a partir da versão 3.5 do framework .NET. Com ele podemos ler, gravar e construir dados XML de forma fácil e dinâmica. O Linq to Xml fornece mais recursos e é muito mais eficiente do que o API presente no namespace System.XML que está presente nas versões anteriores e atuais da plataforma .NET. Com LINQ podemos reduzir e muito nosso código para manusear arquivos XML, sendo também muito mais eficiente. 

Exemplo:
Vamos usar o exemplo de arquivo XML mostrado no exemplo acima. Neste caso usamos um arquivo XML para armazenar registro de logs de uma determinada atividade em nosso sistema. Para o exemplo não utilizaremos melhores praticas, já que essa aplicação é apenas um exemplo. Criei uma classe estática chamada Log. Para retornar todos os registros do arquivo. Vamos utilizar o exemplo de código abaixo. 



























public static List RetornaLog()
        {
            List vListaLog = new List();
            Log vLog = new Log();
  
            XElement root = XElement.Load(HttpContext.Current.Server.MapPath("XMLLog.xml"));
  
            var consulta = from p in root.Elements("logins")
                           select new
                           {
                               login = (string)p.Element("LOGIN"),
                               msg = (string)p.Element("MSG"),
                               valida = (string)p.Element("SUCESSO"),
                           };
  
            foreach (var item in consulta)
            {
                vLog = new Log()
                {
                    login = item.login, msg = item.msg,
                    valido = item.valida
                };
  
                vListaLog.Add(vLog);
            }
             return vListaLog;
        }


Explicando o código acima:
Para navegar por um XML temos que abrir o documento usando a classe XElement
Passando o caminho físico do arquivo no construtor. Depois usamos linq para retornar todos os elementos “logins”. Depois basta preencher os objetos e adicionar na lista. 

Para incluir um novo elemento no XML usamos o seguinte código:




















public void InserirLog()
        {
            try
            {
                string vCaminho = HttpContext.Current.Server.MapPath("XMLLog.xml");
                XElement root = XElement.Load(vCaminho);
                XElement novoLog = new XElement("logins",
                    new XElement("LOGIN", this.login),
                    new XElement("MSG", this.msg),
                    new XElement("SUCESSO", this.valido));
  
                root.Add(novoLog);
                root.Save(vCaminho);
            }
            catch (Exception ex)
            {
                this.erroInterno = false;
                this.msgErro = "Erro ao tentar incluir usuário." + ex.Message.ToString();
            }
        }
Para adicionar basta abrir o arquivo utilizando novamente o XElement. Basta criar um elemento, respeitando o formato do arquivo XML. E por fim, adicionar ao XML e salvar o arquivo. 

Por hoje é só!