Arquivos da categoria ‘C#’

Como funciona o arquivo app_offline.htm

Postado por: Tiago Lemos em 29th mai, 2009 | Categoria: ASP.NET, C#, HTML, VB

Bom, muitos devem conhecer esse arquivo, mas tenho que confessar que eu não sabia da existência dessa excelente funcionalidade do ASP.NET 2.0.

Criando um arquivo HTML com o nome de “app_offline.htm” e colocando esse arquivo na raiz de uma aplicação Web, irá forçar um redirect em toda requisição do IIS para esse arquivo. Bom, ai você deve perguntar qual a vantagem disto?

Imagine que você queira colocar um site em manutenção, onde ninguém em hipótese nenhuma poderá acessar qualquer página do site. Como fazer isso? Simples, coloque um arquivo chamado “app_offline.htm” que você não terá problemas.

Pensando um pouco mais pra frente, imagine que você tenha duas aplicações Web distintas (uma seria o Site a outra seria o Sistema Administrativo do site). Imagine agora que o Sistema Administrativo possui uma mensalidade e o “donos” do sistema não efetuaram o pagamento do mês. Colocando este arquivo na raiz do Sistema Administrativo você bloquea o acesso de qualquer usuário a esta área sem afetar o Site.

Bem simples e legal essa funcionalidade.

Espero que tenham gostado desta dica. Em breve tem mais.

Criando um COM+ integrado com SVN: Parte II

Postado por: Tiago Lemos em 2nd abr, 2009 | Categoria: ASP.NET, C#, VB

Finalmente vamos encerrar o post: Criando um COM+ integrado com SVN: Parte I. Primeiro, desculpe a demora em finalizar este post, mas realmente não estava conseguindo um tempo para escrever.

No post Utilizando SVN com C# nós vimos a utilização da classe System.Diagnostics.Process para executar algumas ações do SVN.

Bom, juntando o útil ao agradável, o que nós precisamos fazer agora é criar alguns métodos no nosso COM+ para que ele possa executar determinadas ações do SVN.

Abaixo veja alguns exemplos que podem ser criados:


public bool CriaRepositorio(string CaminhoSVNServer, string CaminhoRepositorio, string repositorio)
{
	try
	{
		Process processo = new Process();
		processo.StartInfo = new ProcessStartInfo(CaminhoSVNServer + "svnadmin.exe", "create "+ CaminhoRepositorio + repositorio);

		processo.Start();
		processo.WaitForExit();

		return true;
	}
	catch (Exception ex)
	{
		EventLog.WriteEntry("SVN - Criação de Repositório", "Erro: " + ex.Message.ToString() +" || "+ ex.Source.ToString());
		return false;
	}
}

public bool CriaPasta(string SVNSever, string CaminhoSVNServer, string pasta, string usuario, string password)
{
	try
	{
		Process processo = new Process();
		processo.StartInfo = new ProcessStartInfo(CaminhoSVNServer+ "svn.exe", "mkdir -m[notepad] --username \""+ usuario +"\" --password \""+ password +"\" " + SVNSever + pasta);
		processo.Start();
		processo.WaitForExit();

		return true;
	}
	catch (Exception ex)
	{
		EventLog.WriteEntry("SVN Webroom - Criação de Pasta", "Erro: " + ex.Message.ToString() + " || " + ex.Source.ToString());
		return false;
	}
}

Agora vocês podem usar a imaginação e criar mais métodos. Assim que todos os métodos forem criados o que precisamos fazer é dar permissões ao COM+ para que o mesmo possa rodar no servidor, com permissões para executar os processos do SVN.

Passo 1

Registre novamente a DLL, para isso digite a seguinte linha de comando do Visual Studio.

//Linha de comando para registrar uma DLL:
//Digite o caminho até a DLL que será registrada
//regsvcs D:\Arquivos de programas\Complus\Complus\bin\Debug\nome_da_dll.dll

Passo 2

Uma vez registrado a DLL, devemos acessar o Painel de Controle -> Ferramentas Administrativas -> Componetes de Serviço. Você irá notar que existe um processo com o mesmo nome da DLL, pois é, este é seu COM+ rodando.

Passo 3

Feito isso, você deve agora setar as seguintes permissões no COM+.

Clique com o botão direito no Serviço criado e em seguida na guia de Segurança. Marque a primeira opção Autorização e em Nível de Segurança marque a segunda opção.

Agora vá na guia Ativação, em Tipo de Ativação marque Aplicativo de servidor e executar aplicativo como Serviço NT.

Clique em OK. Bom, após realizar todos esses passos o seu COM+ já deve estar funcionando. Caso vocês tenham algum problema podem me perguntar.

Espero que tenham gostado desta série.

Em breve tem mais.

ASP.NET MVC 1.0

Postado por: Tiago Lemos em 21st mar, 2009 | Categoria: ASP.NET, C#, JQuery, Linq, MVC, VB

Agora é oficial, saiu a versão final do ASP.NET MVC. Com pouco mais de 20 dias de atraso (estava sendo previsto o lançamento para o final de fevereiro) saiu a versão final do ASP.NET MVC e agora a MSDN possui a documentação. (veja a documentação aqui).

Você pode acompanhar tutorias liberados para Microsoft aqui ou também pode ver alguns exemplos que criei aqui no blog nas categorias MVC, Linq ou JQuery que é a biblioteca javascript oficial do MVC.

Pegue a versão do MVC 1.0 e aproveite este lançamento, que eu particularmente estou gostando.

Espero que vocês tenham gostado desta dica.

Programação Orientada a Objeto - Herança, Polimorfismo e Encapsulamento

Postado por: Tiago Lemos em 3rd mar, 2009 | Categoria: ASP.NET, C#, PHP, Programação Orientada a Objeto, VB

Depois de um bom tempo sem escrever sobre POO, vamos continuar falando sobre os conceitos: Herança, Polimorfismo e Encapsulamento.

Herança

Esse é um dos principais conceitos da POO. A herança é o compartilhamento de atributos e operações entre classes com base em relações hierárquicas, ou seja, é a utilização de superclasses para criar as subclasses.

Veja o exemplo abaixo:

Herança

Aqui representamos a classe Carro e as subclasse GOL e Ferrari.

Polimorfismo

Polimorfismo é conceito ou melhor é a capacidade que um mesmo método pode se comportar de diferentes maneiras em diferentes classes. Enquanto a herança é voltada mais as classes, o polimorfismo está voltado aos métodos.

Imagine o método Correr na classe Carro. Agora imagine o mesmo método na subclasse GOL e na subclasse Ferrari. Em cada subclasse o método irá se comportar de maneira diferentes.

Encapsulamento

Esse conceito consiste em esconder os detalhes de implementação das Classes. O encapsulamento permite definir a visibilidade dos elementos de uma classe e essa visibilidade controla os acesso aos dados e métodos.

  • Privada: pode ser usado apenas pela classe que o define.
  • Protegida: pode ser usado pela classe que o define e por qualquer subclasse da classe que o define.
  • Pública: pode ser usado por qualquer objeto no sistema.

Bom, com isso finalizamos este post.

Em breve tem mais e espero que tenham gostado.

Criando um COM+ integrado com SVN: Parte I

Postado por: Tiago Lemos em 24th fev, 2009 | Categoria: ASP.NET, C#, VB

Vou mostrar em uma série de 2 posts como criar um COM+ para realizar ações do SVN. Há um tempo atrás precisei criar um COM+ que realiza-se as principais ações do SVN, como por exemplo: Criar pastas, repositórios, “commitar” (se é assim que posso falar) e deletar ações, além de outras funções.
Mas antes de começarmos a mexer com o código, vamos entender o que é o SVN.

O que é SVN e pra que serve um SVN

O SVN é um sistema de controle de versão e com esse controle nós podemos gravar o histórico de todos os arquivos. A idéia é simples, manter um controle de backup do seus arquivos, não utilizando o “Ctrl+C” e “Ctrl+V”.
O SVN mantém um versionamento do projeto, podendo garantir a recuperação de versões antigas do mesmo.
Imagine que você criou um projeto e gravou no SVN. Passado um mês você realizou diversas alterações neste projeto, pois o escopo do mesmo foi alterado (o que é normal na nossa área rsrs).
Ok, você acabou o projeto e gravou tudo no SVN. Vamos imaginar agora que se passaram alguns meses e você precise criar agora um projeto idêntico à aquela primeira versão gravada no SVN.
Pronto, ai entra o controle de versão. Basta você recuperar aquela versão e seu projeto já estará pronto.

Criando o COM+

Chega de teoria chata (mas importante) e vamos ao código. A primeira coisa a ser feita é a criação de um projeto com uma classe que neste caso chama: SVN
Adicione a biblioteca System.EnterpriseServices e a linha [Transaction(TransactionOption.Required), JustInTimeActivation()].


using System;
using System.EnterpriseServices;
using System.Configuration;

namespace Integracao
{
    [Transaction(TransactionOption.Required), JustInTimeActivation()]
    public class SVN : ServicedComponent
    {
    }
}

Agora será necessário criar uma chave e registrar a DLL como Service Component. Para isto, execute as seguintes linhas de comando usando os arquivos sn.exe e regsvcs.exe. Você pode executar no prompt de comando.


//Linha de comando para criar uma Chave:
//Digite o caminho da raiz do projeto e o nome da chave a ser criado
//sn -k "C:/Arquivos de programas/ComPlus/Complus/nome_da_chave.snk"

//Linha de comando para registrar uma DLL:
//Digite o caminho até a DLL que será registrada
//regsvcs D:\Arquivos de programas\Complus\Complus\bin\Debug\nome_da_dll.dll

Assim chegamos ao final do primeiro post. Já estamos com o COM+ praticamente pronto e agora só falta criar os métodos para acessarem as ações do SVN e dar as devidas permissões ao COM+, para que o mesmo funcione corretamente.
Em breve irei finalizar essa integração. Espero que tenham gostado.

ASP.NET MVC: Criando um HTMLHelper

Postado por: Tiago Lemos em 15th fev, 2009 | Categoria: ASP.NET, C#, MVC, VB

No novo MVC você tem a capacidade de criar seus elementos HTML personalizados atráves da classe HTMLHelper.
O objetivo é que você possa criar uma estrutura na qual diminua a quantidade de HTML padrão que você irá escrever.
Vamos ver o exemplo abaixo:

Imagine que você queira criar um HTMLHelper que crie este HTML padrão.


<label for="usuario">Usuario:</labe>
<input type="text" id="usuario" value="" />

Para que tenhamos essa funcionalidade teremos que criar a seguinte classe.


namespace Controles {
public static class HtmlHelperBase
{
   public static string LabelTextbox(this HtmlHelper helper, string identificador, string label_texto, string tipo)
     {
          return String.Format("<label for='{0}'>{1}</label><input type='{2}' id='{3}' value='' />", identificador, label_texto, tipo, identificador);
     }
  }
}

Uma vez criada a classe, agora precisamos importar a namespace e utilizar o método criado em uma View. Veja o exemplo abaixo:


<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="Mvc.Views.Home.Index" %>
<%@ Import Namespace="Controles" %>
  <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<%= Html.LabelTextbox("usuario", "Aqui vem o texto", "text") %>

</asp:Content>

Bem simples e muito útil esse “poder” de personalização que temos.
Espero que tenham gostado. Em breve tem mais.

C# para Iniciantes: Comentários

Postado por: Tiago Lemos em 8th fev, 2009 | Categoria: ASP.NET, C#

Esse assunto pode até parecer muito simples, mas é de extrema importância no desenvolvimento de sistemas, sejam eles simples ou complexos, na verdade em sistemas complexos os comentários são fundamentais.

No C# possuímos 2 tipos de comentários:

Em linha - usando duas barras: //

Este tipo de comentário é utilizado quando necessitamos comentar apenas uma linha de código.

Exemplo:


//Aqui vem um comentário de uma linha
string a = "teste";

Bloco - usando barra asterico para iniciar /* e asterisco barra para fechar */

Este tipo de comentário serve para comentar um bloco de código.

Exemplo:


/*
* Aqui vem um comentário de bloco
* com mais texto descritivo
*/
string a = "teste";

Bom, pode até parecer inútil, mas na verdade comentários são extremamente importantes em um detalhamento do sistema, pois, nem sempre será você que irá dar manutenção no sistema.

É importante comentar os pontos chaves criados por você, para que outros programadores possam enteder o que quer dizer aquele trecho de código.

Espero que tenham gostado.

Em breve tem mais.

C# para Iniciantes: Criar e escrever em um arquivo txt

Postado por: Tiago Lemos em 22nd jan, 2009 | Categoria: ASP.NET, C#

Continuando a série C# para iniciantes, irei mostrar neste post como é simples criar e escrever em arquivo txt usando C#.

Primeiro devemos escolher onde iremos criar o arquivo


string nome_arquivo = "C:/Teste/arquivo.txt";

Depois devemos verificamos se o arquivo existe, se não existir então criamos o arquivo


if (!System.IO.File.Exists(nome_arquivo))
  System.IO.File.Create(nome_arquivo).Close();

Agora usamos a classe TextWriter para escrever no arquivo


System.IO.TextWriter arquivo = System.IO.File.AppendText(nome_arquivo);
arquivo.WriteLine("Escrendo no arquivo");

Fechamos o arquivo


arquivo.Close();

Bem, simples né. Espero que tenham gostado.
Em breve tem mais.

Ressurgindo em 2009

Postado por: Tiago Lemos em 6th jan, 2009 | Categoria: ASP.NET, C#, CSS, Diversos, Tecnologia, VB

Depois de mais de 10 dias sem escrever nada (logo mais vocês irão entender porque eu não escrevi nada), estou ressurgindo em 2009 tentando montar uma lista do que eu irei tentar passar para todos neste próximo ano.

Bom, vamos lá. Irei dar sequência a série C# para iniciantes agora focando nas inovações do Framework 3.5, além dessa série irei continuar também a série Programação Orientada a Objetos.

Neste ano irei focar um pouco mais no MVC Framework ASP.NET que ainda está na versão Beta, junto com o MVC irei abordar também sobre LINQ. Apresentar soluções usando JavaScript, JQuery, CSS, além de sites de referência.

Além desses assuntos citados acima, irei abordar sobre diversas tecnologias. É claro que está não é uma lista definitiva e que não irei escrever sobre outros assuntos, isto é apenas uma idéia do que quero começar a fazer neste ano.

Espero que vocês estejam comigo neste próximo ano e que gostem dos assuntos.

Ah, antes de encerrar este post preciso dizer porquê eu não estava escrevendo durantes esses 10 dias. ISOLAMENTO TECNOLÓGICO. Sim, fiquei todo esse tempo sem ter contato com qualquer tipo de tecnologia, nada, nem mesmo TV, mas não me arrependo, aproveitei e estou renovado para este ano.

Feliz 2009 para todos.

LinqToXML: facilitando a busca em XML

Postado por: Tiago Lemos em 22nd dez, 2008 | Categoria: ASP.NET, C#, Linq

Mais simples do que realizar uma busca usando LinqToSQL (veja o post aqui), é realizar uma busca em um arquivo XML usando LinqToXML.

Vamos logo ao que interessa, ou seja, o código.

Primeiros devemos montar um arquivo do tipo XML.


<?xml version="1.0" encoding="utf-8" ?>
<garage>
  <carro>
    <cor>Azul</cor>
    <ano>2000</ano>
    <modelo>Gol</modelo>
  </carro>
  <carro>
    <cor>Preto</cor>
    <ano>2008</ano>
    <modelo>Palio</modelo>
  </carro>
  <carro>
    <cor>Branco</cor>
    <ano>2006</ano>
    <modelo>Uno</modelo>
  </carro>
</garage>

Agora devemos carregar o arquivo criado acima e em seguida realizarmos uma consulta usando LINQ para escrever o resultado.
Ao montar a consulta você poderá realizar qualquer tipo de filtro, pois, nosso XML já está em uma collection, o que nos permite realizar uma busca atráves do LINQ.


  //Carregue um arquivo do tipo XML
  XDocument xml = XDocument.Load(Server.MapPath("upload/Arquivo.xml"));

  //Recupere todos os nós do tipo "carro"
  //Logo em seguida renomeie para os campos que você está retornando
  var carros = from carro in xml.Descendants("carro")
  select new
  {
    Cores = carro.Element("cor").Value,
    Modelos = carro.Element("modelo").Value
  };

  //Realize um foreach em carros(Collections.Generic.IEnumerable)
  //e escreva usando um dos nomes que você criou para retorno em sua consulta
  foreach (var carro in carros)
  {
    Response.Write(carro.Cores);
  }

Bem simples hein!

Qualquer dúvida podem me escrever.

Espero que tenham gostado e em breve tem mais.