<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog da Hostweb &#187; C#</title>
	<atom:link href="http://blog.hostweb.com.br/tag/c/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.hostweb.com.br</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 23 Aug 2010 15:01:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Enviando emails usando C#</title>
		<link>http://blog.hostweb.com.br/enviando-emails-usando-c/hostweb</link>
		<comments>http://blog.hostweb.com.br/enviando-emails-usando-c/hostweb#comments</comments>
		<pubDate>Wed, 23 Dec 2009 15:22:41 +0000</pubDate>
		<dc:creator>Bruno Sabóia</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Email]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=241</guid>
		<description><![CDATA[Olá, garotada. O post de hoje tratará de um assunto mais simples, porém bastante necessário e básico na rotina atual de programação: envio de emails.
Com a popularização da internet, o email passou a ser um meio de comunicação extremamente difundido. As linguagens mais antigas, como C, não possuem um suporte tão cristalino ao envio de [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, garotada. O post de hoje tratará de um assunto mais simples, porém bastante necessário e básico na rotina atual de programação: envio de emails.</p>
<p>Com a popularização da internet, o email passou a ser um meio de comunicação extremamente difundido. As linguagens mais antigas, como C, não possuem um suporte tão cristalino ao envio de mensagens como as atuais. É claro que é possível fazê-lo, mas nas linguagens atuais é mais fácil.</p>
<p>Linguagens totalmente voltadas ao desenvolvimento web, como Ruby e PHP, tem um ótimo suporte ao envio de emails. O C# se encontra em uma situação intermediária, mas não é nada assustador.</p>
<p>As classes de envio de email se encontram no namespace System.Net.Mail, disponível no framework 2.0 em diante.</p>
<p><span id="more-241"></span></p>
<p>Começamos colocando o remetente e o destinatário da mensagem. Isso é simples de se fazer:</p>
<div id="code">MailAddress from = new MailAddress(&#8221;brunosaboia@hostweb.com.br&#8221;);<br />
MailAddress to = new MailAddress(&#8221;leitor@hostweb.com.br&#8221;);</div>
<p>Simples, não? Agora, podemos criar a nossa MailMessage para enviar o email:</p>
<div id="code">MailMessage message = new MailMessage(from, to);</div>
<p>Agora, já temos o objeto da nossa mensagem. Mas uma mensagem sem assunto, sem conteúdo e sem ser enviada&#8230; bem, não é exatamente o meu conceito de mensagem.</p>
<div id="code">message.Subject = &#8220;Olá, caro leitor&#8221;;<br />
message.Body = &#8220;Gostaria de desejar um feliz natal a você e sua família!&#8221;;</div>
<p>Pronto, assim está melhor. Temos um destinatário, um remetente, um assunto e um conteúdo. Agora podemos chamá-la de mensagem, não? Porém, se não a enviarmos, ela ainda não terá cumprido seu objetivo, e será uma mensagem triste e derrotada. Vamos ajudá-la:</p>
<div id="code">try<br />
{<br />
client.Send(message);<br />
Console.WriteLine(&#8221;Mensagem enviada com sucesso!&#8221;);<br />
}<br />
catch (Exception ex)<br />
{<br />
Console.WriteLine(&#8221;Erro ao enviar: {0}&#8221;, ex.ToString());<br />
}</div>
<p>Se tudo ocorrer bem, a mensagem será enviada e você terá desejado feliz natal a alguém.</p>
<p>Segue abaixo o código completo:</p>
<div id="code">using System;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using System.Net.Mail;</p>
<p>namespace MailTest<br />
{<br />
class Program<br />
{<br />
static void Main(string[] args)<br />
{<br />
MailAddress from = new MailAddress(&#8221;brunosaboia@hostweb.com.br&#8221;, &#8220;Bruno Saboia&#8221;);<br />
MailAddress to = new MailAddress(&#8221;leitor@hostweb.com.br&#8221;, &#8220;Leitor do Blog&#8221;);<br />
MailMessage message = new MailMessage(from, to);</p>
<p>message.Subject = &#8220;Olá, caro leitor&#8221;;<br />
message.Body = &#8220;Gostaria de desejar um feliz natal a você e sua família!&#8221;;</p>
<p>string smtpHost = &#8220;smtp.hostweb.com.br&#8221;;<br />
SmtpClient client = new SmtpClient(smtpHost);</p>
<p>try<br />
{<br />
client.Send(message);<br />
Console.WriteLine(&#8221;Mensagem enviada com sucesso!&#8221;);<br />
}<br />
catch (Exception ex)<br />
{<br />
Console.WriteLine(&#8221;Erro ao enviar a mensagem: {0}&#8221;, ex.ToString());<br />
}</p>
<p>}<br />
}<br />
}</p></div>
<p>Espero que tenham gostado. Feliz natal, e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/enviando-emails-usando-c/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enum em C#</title>
		<link>http://blog.hostweb.com.br/enum-em-c/hostweb</link>
		<comments>http://blog.hostweb.com.br/enum-em-c/hostweb#comments</comments>
		<pubDate>Thu, 17 Dec 2009 13:40:17 +0000</pubDate>
		<dc:creator>Bruno Sabóia</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=206</guid>
		<description><![CDATA[Olá a todos novamente. O tópico de hoje tratará de enums, uma estrutura herdada do C e presente em várias linguagens de programação.
A utilidade dos enums está em organizar tipos de dados sequenciais. Dias da semana são um ótimo exemplo. Os enums servem para enumerar estados, também (conectado, desconectado, em espera, por exemplo).
Observe abaixo como [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá a todos novamente. O tópico de hoje tratará de enums, uma estrutura herdada do C e presente em várias linguagens de programação.</p>
<p style="text-align: justify;">A utilidade dos enums está em organizar tipos de dados sequenciais. Dias da semana são um ótimo exemplo. Os enums servem para enumerar estados, também (conectado, desconectado, em espera, por exemplo).<br />
Observe abaixo como declarar um enum com os dias da semana:</p>
<div id="code">enum Dias { Dom, Seg, Ter, Qua, Qui, Sex, Sab };</div>
<p style="text-align: justify;">Nada de muito fantástico, não é? Há um detalhe aqui. O enum Dom começa com 0 – é o default do C#. Seg seria 1, Ter 2, e assim por diante. Mas adivinhe se podemos mudar essa lógica? Isso mesmo, podemos. E é simples. Podemos fazer:</p>
<div id="code">enum Dias { Dom=1, Seg, Ter, Qua, Qui, Sex, Sab };</div>
<p style="text-align: justify;">Isso faria com que Seg fosse 2, Ter 3, e assim por diante.</p>
<p style="text-align: justify;">A classe Enum (com E maiúsculo) fornece alguns métodos interessantes. Observe o código abaixo:</p>
<div id="code" style="text-align: justify;">
using System;<br />
using System.Collections.Generic;</p>
<p>namespace EnumTest<br />
{</p>
<p>class Program<br />
{<br />
enum Dias { Dom=1, Seg, Ter, Qua, Qui, Sex, Sab };<br />
static void Main(string[] args)<br />
{<br />
foreach (string dia in Enum.GetNames(typeof(Dias)))<br />
{<br />
Console.WriteLine(dia);<br />
}<br />
foreach (int i in Enum.GetValues(typeof(Dias)))<br />
{<br />
Console.WriteLine(i);<br />
}<br />
Console.ReadLine();<br />
}<br />
}<br />
}</p></div>
<p style="text-align: justify;">Com isso, listamos o nome e os valores de todos os itens da nossa enum dos dias da semana.</p>
<p style="text-align: justify;">Há também a possibilidade de mudar o tipo base do enum, bem como criar flags com essa estrutura. Isso fica como dever de casa para a criançada.</p>
<p style="text-align: justify;">Obrigado, e espero que tenham gostado. Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/enum-em-c/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Um pouco sobre LINQ</title>
		<link>http://blog.hostweb.com.br/um-pouco-sobre-linq/hostweb</link>
		<comments>http://blog.hostweb.com.br/um-pouco-sobre-linq/hostweb#comments</comments>
		<pubDate>Thu, 03 Dec 2009 11:21:37 +0000</pubDate>
		<dc:creator>Bruno Sabóia</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=140</guid>
		<description><![CDATA[Olá a todos novamente. Esse post tratará sobre LINQ (que quer dizer Language Integrated Query, ou Linguagem de Consulta Integrada). Você pode usar os nossos conhecidos amigos “select”, “where” e “from” do SQL nativamente no código C# ou VB. Essa poderosa ferramenta permite que você trate objetos da mesma maneira como trataria resultados de uma [...]]]></description>
			<content:encoded><![CDATA[<p>Olá a todos novamente. Esse post tratará sobre LINQ (que quer dizer Language Integrated Query, ou Linguagem de Consulta Integrada). Você pode usar os nossos conhecidos amigos “select”, “where” e “from” do SQL nativamente no código C# ou VB. Essa poderosa ferramenta permite que você trate objetos da mesma maneira como trataria resultados de uma consulta ao banco.</p>
<p>Um exemplo básico de código:</p>
<div id="code">using System;<br />
using System.Linq;<br />
using System.Collections.Generic;</p>
<p>class LinqTeste {<br />
static void Main() {<br />
string[] nomes = { &#8220;Bruno&#8221;, &#8220;Sérgio&#8221;, &#8220;Giordano&#8221;,<br />
&#8220;Eduardo&#8221;, &#8220;Robson&#8221;, &#8220;Pablo&#8221;,<br />
&#8220;Lino&#8221;, “Lyanderson” };</p>
<p>IEnumerable query = from s in nomes<br />
where s.Length &gt; 4<br />
orderby s<br />
select s.ToUpper();</p>
<p>foreach (string nome in query)<br />
Console.WriteLine(nome);<br />
}<br />
}</p></div>
<p>Esse código imprimirá na console todos os nomes cujo tamanho seja maior que 4 (excluindo, portanto, apenas nosso amigo Lino), ordenando-os por ordem alfabética.</p>
<p>Na verdade, a grande sacada do LINQ reside em que podemos abstrair se estamos lidando com um banco ou com objetos – a única diferença é a origem dos dados, não como os tratamos. No caso do exemplo, usamos um array de strings como nossa geratriz de dados, mas isso poderia muito bem ser gerado a partir de uma consulta a um banco.</p>
<p>Além disso, a maioria dos desenvolvedores que já trabalharam com SQL, independente da linguagem em que desenvolvessem, conhecessem os comandos básicos do LINQ. Isso torna mais fácil entender o código, mesmo pra quem não conhece muito bem a sintaxe do C# ou do VB.net.</p>
<p>Espero que tenham gostado desse breve esclarecimento sobre LINQ. Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/um-pouco-sobre-linq/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Active Directory com C#</title>
		<link>http://blog.hostweb.com.br/active-directory-com-c/hostweb</link>
		<comments>http://blog.hostweb.com.br/active-directory-com-c/hostweb#comments</comments>
		<pubDate>Wed, 25 Nov 2009 19:07:44 +0000</pubDate>
		<dc:creator>Bruno Sabóia</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=71</guid>
		<description><![CDATA[Uma das coisas mais fascinantes do framework .NET é a sua integração com alguns serviços do Windows.  Trataremos de um deles nesse post de inauguração: o Active Directory.
O serviço de domínio da Microsoft, carinhosamente chamado de AD, possui ferramentas poderosas para o gerenciamento de diretórios, sejam eles pequenos ou corporativos. A arquitetura do AD [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas mais fascinantes do framework .NET é a sua integração com alguns serviços do Windows.  Trataremos de um deles nesse post de inauguração: o Active Directory.</p>
<p>O serviço de domínio da Microsoft, carinhosamente chamado de AD, possui ferramentas poderosas para o gerenciamento de diretórios, sejam eles pequenos ou corporativos. A arquitetura do AD abrange LDAP (Lightweight Directory Access Protocol, ou Protocolo Leve de Acesso a Diretório), autenticação Kerberos (usada para autenticação nas máquinas) e alguns serviços de DNS. Com ele, é possível gerenciar políticas de rede de maneira avançada. Mas o foco do post não é falar sobre o AD em si, e sim como usar o C# para tirar proveito dessa mecânica.</p>
<p>Em primeiro lugar, vamos criar um método para listar todos os domínios da árvore em que o computador está logado. Lembrando que devemos estar conectados ao diretório do AD para podermos realizar pesquisas.</p>
<p>O código do método pode ser algo do tipo:</p>
<p><span id="more-71"></span></p>
<div id="code">
public static List&lt;Domain&gt; EnumerateDomains()<br />
{</p>
<p>List&lt;Domain&gt; lDomain = new List&lt;Domain&gt;();</p>
<p>Forest forLocalForest = Forest.GetCurrentForest();</p>
<p>DomainCollection dcDomains = forLocalForest.Domains;</p>
<p>foreach (Domain objDomain in dcDomains)<br />
{<br />
lDomain.Add(objDomain);<br />
}</p>
<p>return lDomain;</p>
<p>}
</p></div>
<p>OK, nada demais até aí. Estamos criando uma lista de domínios, requisitando a floresta atual e pegando os domínios desta floresta, depois devolvemos tudo na lista. Mas nós não temos nada de útil por enquanto. Podemos pegar informações mais relevantes. Esse código de console nos devolveria algumas informações úteis sobre o domínio atual que nossa máquina está conectada.</p>
<p>O primeiro passo é a se fazer é aumentar o buffer do console, pois em um domínio vão existir muitos usuários e às vezes não será possível imprimir tudo na tela sem aumentar o espaço.</p>
<div id="code">
Console.BufferHeight = Int16.MaxValue &#8211; 1;
</div>
<p>Em seguida, vamos enumerar os domínios:</p>
<div id="code">
try<br />
{<br />
Console.WriteLine(&#8221;Enumerando domínios . . .\n&#8221;);</p>
<p>foreach (Domain d in EnumerateDomains())</p>
<p>{<br />
Console.WriteLine(string.Format(&#8221;Nome do domínio:{0}&#8221;, d.Name));<br />
}<br />
}
</p></div>
<p>Isso mostrará o nome de todos os domínios disponíveis na rede.</p>
<p>Vamos agora imprimir algumas informações sobre o DC (Domain Controller, ou Controlador de Domínio):</p>
<div id="code">
Console.WriteLine(&#8221; * Algumas informações sobre os controladores de domínio&#8230;&#8221;);</p>
<p>foreach (DomainController dc in d.DomainControllers)<br />
{<br />
Console.WriteLine(string.Format(&#8221;\n\tNome do DC: {0}\n\tSistema Operacional do DC: {1}\n\tIP do DC: {2}\n\tHora e data atual do DC: {3}&#8221;, dc.Name, dc.OSVersion, dc.IPAddress, dc.CurrentTime.ToString(&#8221;dd/MM/yyyy HH:mm:ss&#8221;)));<br />
Console.WriteLine(&#8221;\n * Algumas informações sobre as roles do DC&#8230;\n&#8221;);</p>
<p>foreach (ActiveDirectoryRole adr in dc.Roles)<br />
{<br />
Console.WriteLine(&#8221;\t&#8221; + adr.ToString());<br />
}<br />
}
</p></div>
<p>Esse código irá mostrar o nome, o sistema operacional, o IP e a hora e data atual do DC. Logo em seguida, irá mostrar as roles do DC.</p>
<p>No final, iremos mostrar todos os usuários criados nesse DC. O código é assim:</p>
<div id="code">
Console.WriteLine(&#8221;\n * Enumerando usuários do DC&#8230;&#8221;);<br />
DirectoryEntry group = new DirectoryEntry(&#8221;LDAP://&#8221; + dc.IPAddress);<br />
DirectorySearcher src = new DirectorySearcher(group, &#8220;(objectCategory=user)&#8221;);</p>
<p>foreach (SearchResult res in src.FindAll())<br />
{<br />
Console.WriteLine(&#8221;\t&#8221; + res.Properties["name"][0]);<br />
}
</p></div>
<p>Pronto, agora nós já temos alguma informação relevante sobre o DC. O código completo do projeto segue abaixo:</p>
<div id="code">
using System;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using System.DirectoryServices;<br />
using System.DirectoryServices.ActiveDirectory;</p>
<p>namespace AD_Test<br />
{<br />
class Program<br />
{</p>
<p>static void Main(string[] args)<br />
{<br />
Console.BufferHeight = Int16.MaxValue &#8211; 1;<br />
try<br />
{<br />
Console.WriteLine(&#8221;Enumerando domínios . . .\n&#8221;);</p>
<p>foreach (Domain d in EnumerateDomains())<br />
{<br />
 Console.WriteLine(string.Format(&#8221;Nome do domínio:{0}&#8221;, d.Name));<br />
Console.WriteLine(&#8221; * Algumas informações sobre os controladores de domínio&#8230;&#8221;);</p>
<p> foreach (DomainController dc in d.DomainControllers)<br />
 {<br />
Console.WriteLine(string.Format(&#8221;\n\tNome do DC: {0}\n\tSistema Operacional do DC: {1}\n\tIP do DC: {2}\n\tHora e data atual do DC: {3}&#8221;, dc.Name, dc.OSVersion, dc.IPAddress, dc.CurrentTime.ToString(&#8221;dd/MM/yyyy HH:mm:ss&#8221;)));<br />
Console.WriteLine(&#8221;\n * Algumas informações sobre as roles do DC&#8230;\n&#8221;);</p>
<p>foreach (ActiveDirectoryRole adr in dc.Roles)<br />
{<br />
Console.WriteLine(&#8221;\t&#8221; + adr.ToString());<br />
}</p>
<p>Console.WriteLine(&#8221;\n * Enumerando usuários do DC&#8230;&#8221;);<br />
DirectoryEntry group = new DirectoryEntry(&#8221;LDAP://&#8221; + dc.IPAddress);<br />
DirectorySearcher src = new DirectorySearcher(group, &#8220;(objectCategory=user)&#8221;);</p>
<p>foreach (SearchResult res in src.FindAll())<br />
{<br />
Console.WriteLine(&#8221;\t&#8221; + res.Properties["name"][0]);<br />
}<br />
}<br />
}<br />
}<br />
catch (Exception ex)<br />
{<br />
Console.WriteLine(string.Format(&#8221;Erro ao tentar enumerar domínios: {0}&#8221;, ex.Message));<br />
}</p>
<p>Console.WriteLine(&#8221;\nEnumeração concluída&#8221;);<br />
Console.Read();</p>
<p>}</p>
<p>public static List&lt;Domain&gt; EnumerateDomains()<br />
{<br />
List&lt;Domain&gt; lDomain = new List&lt;Domain&gt;();<br />
Forest forLocalForest = Forest.GetCurrentForest();<br />
DomainCollection dcDomains = forLocalForest.Domains;</p>
<p>foreach (Domain objDomain in dcDomains)<br />
{<br />
lDomain.Add(objDomain);<br />
}</p>
<p>return lDomain;<br />
}<br />
}<br />
}
</p></div>
<p>Espero que tenham gostado. Até a próxima, e cuidado para não quebrar seu servidor de domínio, alguém pode ficar com raiva.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/active-directory-com-c/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
