All posts in .NET

Salve, salve galera,

 

Hoje vamos ver como criar nosso “Server Farm”, lembrando que podemos entender uma “Server Farm” como um conjunto de servidores que vão trabalhar em conjunto para fazer esse balanceamento de carga. Aqui podemos ter servidores locais e remotos, trabalhando em portas diferentes com sistemas operacionais diferentes, desde que o que foi requisitado esteja com a mesma estrutura em todos (é interessante termos a mesma estrutura de aplicações, se possível, igual em todos os servidores, para facilitar a administração).

Tendo essa definição da Server Farm vamos por a mão na massar, para criarmos uma Farm basta clicarmos com o botão direito sobre “Server Farms” e depois clicar em “Create Server Farm”.

Create Server Farm

 

Read more


Salve galera,

Dando continuidade ao nosso problema, agora vamos ver o que precisaremos ter para podermos brincar com esse ambiente.

Vamos lá, temos um servidor que será a porta de entrada para todas as requisições (SERVCORPAPP). É exclusivamente nesse servidor que vamos mexer, partindo do principio que, nos outros servidores temos o IIS instalado e a ou as aplicações respondendo.

O primeiro passo é baixarmos o Web Plataform Installer (que salva a vida muitas vezes). Segue o Link para download.

Depois de instalado vamos procurar pelo Application Request Routing (ARR) que é a nossa feature que irá gerenciar as requisições.

ARR

 

Depois de instalado podemos observar que ele adiciona um item na estrutura original do IIS, como podermos observar abaixo. O ARR cria uma estrutura chamada Server Farms.

Server Farms

 

Podemos entender uma “Server Farm” como um conjunto de servidores que vão trabalhar em conjunto para fazer esse balanceamento de carga. Aqui podemos ter servidores locais e remotos, trabalhando em portas diferentes com sistemas operacionais diferentes, desde que o que foi requisitado esteja com a mesma estrutura em todos (é interessante termos a mesma estrutura de aplicações, se possível, igual em todos os servidores, para facilitar a administração).

Bom galera, por agora é só… nos próximos artigos iremos começar a configurar nosso ambiente.

 

Até a próxima.


Salve, salve galera.

Acredito que a maioria de nós já passou pela situação de ter uma aplicação rodando e o servidor nem sempre aguentar ou quando é preciso dar manutenção nele é um verdadeiro “parto”, temos janelas minusculas (quando elas existem) de manutenção e temos um over head administrativo muito grande. Vale ressaltar que estou falando aqui de ambientes corporativos que não possuem um cloud privada ou publica, nem componentes de infraestrutura para suportar tais recursos.

Nessa série de artigos vamos ver como montar uma Farm de servidores IIS para podermos fazer o balanceamento de carga entre eles dividindo nosso processamento, e apoiado nisso uma forma de podermos dar manutenção ou mesmo adicionar/remover servidores desse balanceamento sem que a disponibilidade da aplicação seja afetada.

O Ambiente

Nosso ambiente é composto hoje de um único servidor que atende as requisições externas vindas das mais diversas origens como por exemplo mais de 1000 vendedores que utilizam o sistema de força de vendas da empresa, aplicativos de integração com terceiros (operados logísticos, fornecedores, e clientes que tem acesso a uma área exclusiva deles). Todos os acessos são feitos através de webservices que disponibilizam as regras para cada acesso.

O servidor é único não havendo janela de manutenção para ele sem que, os aplicativos fiquem fora do ar. A empresa trabalha no formato 24×7 (uma industria por exemplo) e tem a necessidade de acessos constantes por parte de todos os usuários.

Por trás desse servidor temos toda uma infraestrutura de servidores de banco e tudo mais, porém nosso ponto de entrada é único e está começando a ficar “indisponível”.

Alguns irão dizer, que basta modificarmos a aplicação para apontar para outro IP ou criar uma parâmetro de configuração ou 100 outras possibilidades, mas vale lembrar que precisamos de um PROBLEMA. :D

O Problema

Nosso servidor começou a ficar carregado, não consegue mais gerenciar todas as requisições e além disso tivemos algumas mudanças administrativas que estão implicando em constantes atualizações de aplicações o que gera a indisponibilidade momentânea de aplicativos isolados durante todo o dia mas que geram certo desconforto para os usuários e certa desconfiança também, do tipo “será que a empresa esta preparada para suportar a carga de trabalho atual ?”. Além é claro da inclusão de aplicações novas, recursos novos (e geralmente muito acessados). Em resumo um ambiente que está em plena evolução.

A solução

Para minimizar esse problemas temos o recurso de Load Balance (balanceamento de carga) que não é exclusivo do ISS, mas sim da arquitetura de servidores. Existe N maneiras de fazermos load balance de aplicações, seja a nível de rede, nível de aplicação ou nível de sistema operacional.

A ideia aqui é termos uma distribuição na carga de processamento da aplicação dividida entre servidores, existem conceitos que dizem que o processamento pode ser feito um pouco em cada máquina, ou todo em uma máquina e se ela não aguentar desviamos o fluxo para outra, e etc.

Vamos fazer um laboratório bem simples, prático e funcional de load balance de servidores IIS a nível de aplicação utilizando o Application Request Routing (ARR), uma feature do próprio IIS.

No nosso caso, todas as requisições são disparadas contra o servidor SRVCORPAPP, esse servidor possui apenas o IIS configurado com o balanceamento de carga e por trás dele temos os outros servidores trabalhando para o processamento.

Por trás desse servidor teremos diversos servidores (que iremos construir com o tempo) para suportar as aplicações.

Resumindo

Temos um ambiente que não pode (ou não deveria) ficar parado, e que tem que atender a constantes evoluções e crescimento de maneira simples e que os aplicativos já existentes não tenham que ser modificados.

 

Pessoal nos próximos posts iremos fazer o passo-a-passo da configuração do nosso ambiente até deixa-lo funcional.

Até a próxima.

 


Salve, salve galera,

Muita gente já precisou em algum momento gerar um classe que representasse um schema XML para poder utiliza-la como Model em alguma aplicação. Hoje em dia com a crescente demanda por emissão de documentos fiscais eletrônicos  (NFe, CTe, MDFe) a implementação nos sistemas legados tem se tornado alta.

Porem temos um problema muito grande, o schema XML da NFe por exemplo , tem muitas tags, e tipos complexos, o que demanda muito tempo de escrita de codigo, para minimizar (nao eliminar :D) esse problema, temos um recurso muito interessante no Visual Studio que nos permite criar uma classe apartir de um schema XML. Vamos ver ???

Primeiramente precisamos de um schema XML para trabalhar, nesse caso vou utilizar o schema atual da NFe.

Schema1

Tendo escolhido nosso schema, precisaremos abrir o Prompt de Comando do Visual Studio e nos dirigirmos ate a pasta onde se encontram esses schemas, no meu caso, esta nesse caminho

C:ProgramDataMicrosoftWindowsStart MenuProgramsMicrosoft Visual Studio 2012Visual Studio Tools

Schema2

Agora, para criarmos nossa classe basta utilizarmos o seguinte comando:


xsd.exe xmldsig-core-schema_v1.01.xsd nfe_v2.00.xsd /c

Teremos o seguinte resultado.

Schema3

Agora basta adicionarmos a classe gerada (que fica a principio com o mesmo nome do schema utilizado) e utiliza-la.

Segue um printzinho para termos uma ideia.

Schema4

 

Pessoal de uma maneira bem simples , temos uma classe Model do nosso schema, lembrando que, poderemos ter diferenças de funcionamento a cada conteúdo de schema (tipos complexos, e tudo mais). Mas isso já ajuda bastante.

Por hoje paro por aqui, espero ter ajudado.

 


Salve, salve galera…

Todos nós quando estamos desenvolvendo rotinas que trabalham com números imputados temos que nos atentar nas conversões e garantir que não haverá problemas.

Para isso temos a opção de realizar a conversão utilizando o método TryParse, porém, se a cada recuperação de dados fizermos isso nosso código ficara bem extenso. Então hoje vou demonstrar um recurso simples, mas que auxilia muito na nossa vida. Assim como temos o método ToString() que realiza uma conversão “automática” do valor para string, criaremos um método ToInt(), para que possamos de maneira simples recuperar valores imputados, ou realizar conversões com valores tipo INT.

public static int ToInt(this object param)
{
      int saida;
      if (param != null)
      {
           if (int.TryParse(param.ToString(), out saida))
                 return saida;
           else
                 throw new InvalidCastException("Impossível converter para inteiro");
      }
      else
      {
           throw new InvalidCastException("Impossível converter para inteiro");
      }
}

Pronto pessoal, esse é nosso método de extensão para recuperar o Int de um atributo ou variável, ou afins. E para utilizar basta chamarmos da seguinte forma.

int variavel = txtNumero.Text.ToInt()

E ae pessoal ? tudo em cima ????

Nesse post vou mostrar uma ( das varias ) maneiras de criar um repositório de usuários no ASP.NET MVC. Esse recurso pode ser utilizado por exemplo, em conjunto com o recurso de BaseController para controlar o acesso de usuários. Nesse caso iremos trabalhar com Cookies

Bom vamos la, mãos na massa….


namespace Portal.Seguranca
{
    public class UsersRepository
    {
         public static Models.Usuario.Usuario usuarioLogado
         {
              get
              {
                    var usr = HttpContext.Current.Request.Cookies["UserCookieAuthentication"];
                    if (usr == null)
                    {
                          return null;
                    }
                    else
                    {
                          string NovoToken = CryptographyRepository.Descriptografar(usr.ToString());
                          int IDUsuario;

                          if (int.TryParse(NovoToken, out IDUsuario))
                          {
                                return Usuario.getById(IDUsuario);
                          }
                          else
                          {
                                return null;
                          }
                     }
              }
        }

        public static bool deslogar()
        {
               try
               {
                       HttpCookie http = new HttpCookie("UserCookieAuthentication");
                       http.Expires = DateTime.Now.AddDays(-1);
                       HttpContext.Current.Response.Cookies.Add(http);

                       return true;
               }
               catch(Exception ex)
               {
                      throw ex;
               }
        }

        public static bool registrarUsuario(Models.Seguranca.Usuario usr)
        {
              try
              {
                    if (usr == null)
                    {
                        return false;
                    }
                    else
                    {
                        //Criando um objeto cookie
                        HttpCookie UserCookie = new HttpCookie("UserCookieAuthentication");

                        //Setando o ID do usuário no cookie
                        UserCookie.Value = CryptographyRepository.Criptografar(usr.Codigo.ToString());

                        //Definindo o prazo de vida do cookie
                        UserCookie.Expires = DateTime.Now.AddHours(2);

                        //Adicionando o cookie no contexto da aplicação
                        HttpContext.Current.Response.Cookies.Add(UserCookie);

                        return true;
                    }
            }
            catch (Exception ex)
            {
                 throw ex;
            }
       }
    }
}

Desse ponto endiante, pode simplesmente, fazer a chamada da seguinte forma.


Models.Usuario.Usuario usr = UsersRepository.usuarioLogado;

Lembrando que os Coockies de preferencia devem estar criptografados para segurança.

Ate a próxima pessoal.


Tudo beleza pessoa ?

Hoje vou mostrar uma forma de se trabalhar com Login no ASP.NET MVC. Existem varias formas, mas uma que eu acho interessante e simples de se trabalhar é criarmos um Controller Padrão ( aqui chamado de BaseController) do qual todos os outros Controllers herdaram e assumiram a operação de login do mesmo. A validação do Login pode ser feita por sessões, arquivos XML, Cookies , e afins, essa questão depende do gosto do fregues… :D

Mas vamos colocar a mão na massa….


namespace MVC.Controllers
{
     [HandleError]
     public class BaseController : Controller
     {
          [HandleError]
          protected override void OnActionExecuting(ActionExecutingContext ctx)
          {
               base.OnActionExecuting(ctx);

               Models.Seguranca.Usuario usr = UsersRepository.usuarioLogado;

               if (usr != null)
               {
                    //Codigo caso esteja logado.
               }
               else
               {
                     //Codigo caso nao esteja logado.
                     ctx.HttpContext.Response.Redirect("/Login");
               }
           }
      }
}

Pessoal essa uma maneira bem simples, toda vez que um controller que herde de BaseController for chamado o controller ira executar sua operação padrão ( base.OnActionExecuting(ctx); ) e depois o que for programado por nos. E para ver o resultado basta criarmos um Controller da seguinte forma.

namespace Portal.Controllers
{
     public class HomeController : BaseController
     {
         public ActionResult Index()
         {
               return View();
         }
     }
}

Simples não ?

Em um próximo artigo irei exemplificar o código presente no bloco

Models.Seguranca.Usuario usr = UsersRepository.usuarioLogado;

Ate a próxima pessoal.


Salve, salve galera…

Acredito que assim como eu todos em algum momento pensem em desenvolver um projeto mas depois mudam a ideia ou ate mesmo o nome do mesmo.. no TFS Service isso pode ser um tanto quanto traumático a primeira vista, já que , no portal não temos a opção de “Remove Project”. Pensando nisso, nesse post vou mostrar como remover um projeto do TFS Service, aumentando as possibilidades de projetos desenvolvidos e deixando nossa  área  de trabalho mais limpa.

A primeira coisa a ser feita e navegador via prompt de comando ate o diretório de instalação do nosso visutal studio 2012.


cd C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDE

Acessando o diretorio

 

 

 

 

 

Dentro do diretório temos um exe chamado TFSDeleteProject que faz a remoção do projeto e aceita como parâmetro a URL da Collection que trabalhamos e opcionalmente o nome do projeto

CUIDADO: se o nome do projeto nao for informado a Collection inteira sera removida. E essa operação não tem retorno.

Podemos utilizar o TFSDeleteProject da seguinte forma:


TFSDeleteProject.exe /collection:https://guilhermescardoso.visualstudio.com/DefaultCollection <<Projeto>>

TFSDeleteProject

 

 

 

 

 

Apos isso serão realizadas algumas verificações e solicitado se confirmamos ou não a remoção.

Confirmacao

Logo apos sera possível acompanhar a remoção dos diretórios do projeto.

 

Final

 


Galera salve, salve …. foi realizado na noite de 05/05/2011 na Casa de Cultura da Cidade de Olimpia um bate-papo pra galera da ETEC Olimpia sobre .NET Framework , encerrando as palestras da Semana de Informação e Comunicação. Uma ressalva que gostaria de fazer foi o interesse do pessoal, que fez diversos questionamentos sobre o assunto tratado. Com a participação dos alunos do 1º módulo do curso tecnico em informatica, tivemos a oportunidade de mostrar algumas caracteristicas que diferenciam a plataforma das outras, que fazem com que ela se destaque. No final tive a oportunidade de bater um papo sobre mercado de trabalho , fugindo até um pouco do foco da palestra, mas que com certeza, foi de grande valia.

Com certeza essa foi a primeira palestra de várias a serem realizadas lá. Principalmente devido a esse fato , o interesse é muito importante.

Assim que possivel, colocarei as fotos do evento.