Pena que no Brasil ainda não temos essa cultura =)
Mas hoje é dia do programador, então, parabéns à todos que tem essa profissão!!! Ou tentam ter hahahahahaha.
Abraços!
Se eu não apertei Shift + Del...
Pena que no Brasil ainda não temos essa cultura =)
Mas hoje é dia do programador, então, parabéns à todos que tem essa profissão!!! Ou tentam ter hahahahahaha.
Abraços!
Uma postagem rápida para falar sobre SQL e aproveitar para dizer que tive 2 artigos publicados na SQL Magazine deste mês de Agosto (Edição 78). \o/ hehehehe!!!!
Então... Acabei de me deparar com um problema bobo hoje. Estava criando um procedure que tinha um status do tipo Bit.
Para chamar a procedure passava 0 ou 1... Maravilha!
Entretanto, no sistema no qual a procedure ia ser chamada, poderia listar os ativos, inativos ou os ativos (E) inativos.
Poxa que fácil, basta apenas passar no parâmetro do status o valor NULL.
Vamos ao exemplo:
CREATE PROCEDURE [dbo].[ListarNulo] @Status BIT AS BEGIN SELECT [ParceiroCodigo] ,[CPF] ,[NumMatricula] FROM [ListaBranca] WHERE ([Status] = @Status OR @Status = NULL) END
Poxa, que nada de diferente, pronto acabou! Éééé... não, infelizmente quando rodei a procedure passando NULL no parâmetro... Não me trouxe nada! Mas pq???
Bom, foram 10 minutos revisando a procedure (não era essa acima, era uma maiorzinha) e mas 10 minutos para descobrir e bater a mão na testa dizendo "nossa como eu sou burro".
A frase do que eu precisa me dizia a resposta. "Preciso verificar se o parâmetro (É) nulo." "É" nulo e não "Igual" a Nulo. Vamos alterar a procedure.
ALTER PROCEDURE [dbo].[ListarNulo] @Status BIT AS BEGIN SELECT [ParceiroCodigo] ,[CPF] ,[NumMatricula] FROM [ListaBranca] WHERE ([Status] = @Status OR @Status IS NULL) END
Podemos ver que tirei o igual e coloquei a cláusula IS, apenas para verificar se é nulo. Resolvido! IS um lixo mesmo... Abraços!
Encontro poucas informações sobre WCF atualmente na Internet. Na verdade pouco usei esta tecnologia, mas quando começei a pesquisar sobre a maior dúvida era: O que WCF tem de diferente dos Web Services.
Para um conteúdo completo, recomendo o blog do MVP Israel Aece. Ele fez alguns vídeos e explica muitas coisas do WCF, falando também as diferenças entre as tecnologias.
A partir do blog dele, tentei fazer uma tabela básica com o que existe em Web Services e o que existe no WCF. O Resultado é o lixo abaixo:
Ação | Web Services | WCF |
Estrutura de Projeto |
Arquivos .asmx, trabalha com métodos de serviço. | Arquivos .srv, trabalha com contratos de serviços. |
Contratos | Obrigatório o uso atributo [WebMethod] em cada método que estará disponível para o acesso. | Interfaces determinam os contratos, decoradas com [ServiceContract]. Pode ter tipos complexos vinculados aos serviços. |
Serialização/ Deserialização |
Serializa todos os membros públicos com XmlSerializer. | Utiliza o DataContractSerializer, parecido com XmlSerializer porém persiste membros private e protected e gera um XML mais simplificado, melhorando a interoperabilidade entre as plataformas. |
Protocolo/ Hosting |
Pode somente ser hospedado no IIS, utilizando o protocolo HTTP/HTTPS. | Arquitetura muito mais flexível e é independente do protocolo, ou seja, ele pode rodar em HTTP, HTTPS, TCP, MSMQ, etc. Pode usar o IIS como host ou ser um serviço instalado no Windows. |
Extensibilidade | Interceptar as requisições através de SOAP Extensions. | Inúmeros pontos de extensibilidade tanto do lado do serviço quanto do cliente. |
Segurança | Segurança baseada no transporte, ou seja, ele somente será seguro se você expor o serviço através de HTTPS. Pode utilizar SoapHeader com usuário e senha. Funciona bem, mas é vulnerável. | É seguro por padrão. Para utilizar a autenticação baseada em UserName/Password que o WCF fornece sob o protocolo HTTP, será necessário utilizar um certificado. |
Configuração | Utiliza a Web.config de forma declarativa | Seção de configurações são extremamente ricas. Segurança, transações, know types, behaviors, bindings, endpoints, contratos, etc. É um pouco complexo. Grande parte do que temos no WCF não existe nativamente no ASMX. |
Interoperabilidade | Interoperabilidade O ASMX não possui nativamente suporte a especificações que foram definidas por grandes "players" do mercado. Precisa da instalação de um Add-on para o Visual Studio .NET. | Padrões já foram implementados nativamente e são configuráveis. Consegue facilmente conversar com serviços construídos em ASMX em ambos os lados. |
Cliente | Pode ser integrado com muitas aplicações. | Muito mais flexível que o ASMX. |
Desempenho | http://msdn.microsoft.com/en-us/library/bb310550.aspx | |
Resultado Final |
Gera WSDL | Gera WSDL |
Conclusão |
Muitas funcionalidades ainda são de forma idêntica entre o WS e o WCF. Quanto a questões de configuração, segurança, desempenho e Interoperabilidade o WCF ganha por ter todos os padrões de XML adicionados nativamente, englobar todas as tecnologias de computação distribuída da Microsoft e ser mais flexível a alterações e extensibilidade. Os Web Services são pouco mais fáceis de se trabalhar quanto a questão de criação de projeto e análise de erros. Entretanto a questão de desenvolvimento o WCF é bem mais avançado. Por fim, os dois geram WSDL para o cliente consumir os dados. |
Se colocarmos em uma balança as duas tecnologias. Realmente pouca coisa parece ter mudado.
Entretanto, pensando no seguinte fato: Se hoje minha empresa vai começar a criar algo orientado a serviços, deveriamos usar o WCF, pois é uma nova tecnologia que vai substituir o Web Services.
Agora, fazer a migração das tecnologias, talvez isso ainda (atualmente) não vale tanto a pena. Pelo mesmo motivo de "parecer" o mesmo da mesma coisa.
Bem simples essa resposta. Funciona como esta na imagem acima =).
Ok, não é tão simples. Mas ai está o ponto deste lixo de post. As matrizes, ou como chamamos no C# arrays, multidimensionais são, como muitos professores de faculdade dizem, uma caixa de Biz, ou melhor, linha e coluna igual na matemática.
E eles estão certos. É isso mesmo. Mas não é como o C# trata isso internamente.
Arrays são Reference Types, traduzindo, variáveis por referência (para quem não sabe, existem 2 tipos, os tipos por referência e os por valor, os Value Types). Os Reference Types guardão, ao invés do valor da variável, o endereço de memória no qual este valor está disponível.
Entendendo isso, vamos a Array. Imaginando a seguinte entrada do programa:
int[,] x = new int[2, 3]; x[1, 2] = 10;
Na primeira linha, criamos uma matriz “x” de inteiros com 2 linhas e 3 colunas. Na realidade, inserimos na memória stack (Pilha) um endereço, podemos ver essa ação na imagem acima (e todas as outras ações também =P). Podemos ver que “x” guarda o endereço de memória “adew:12ws”.
A partir dessa posição de memória podemos entender como o C# se comporta.
Como temos uma array de 2 por 3, vamos ter primeiro neste endereço (“adew:12ws”) outros dois endereços conforme solicitamos na “linha” [2, 3], e esses dois endereços terão as quantidades (três neste caso) de VALORES que solicitamos na "coluna" [2, 3].
Eu disse valores em maiúscula pois realmente na última instrução da array não teremos mais apontamento para memória e sim o valor real guardado. Esse valor é iniciado zero para todas as 6 possibilidades.
E como funciona a troca de valor, como a segunda linha de instrução diz x[1, 2] = 10? Na imagem podemos ver passo a passo como funciona.
A variável "x", guarda o endereço “adew:12ws” que em 0 guarda o endereço “apop:1234” e em 1 guarda o endereço “eeee:uuuu” (lembrando que as posições da array sempre começam com 0 e terminam em valor - 1). Vamos trocar o valor na linha 1 (“apop:1234” em “adew:12ws”) da coluna 2 (valor 0 em “apop:1234”) para 10 (risca o zero e coloca o 10). Pronto assim o C# trata as arrays multidimensionais.
E se tivéssemos mais uma dimensão?
int[,,] x = new int[2, 3, 2];
A mesma idéia iria se aplicar, onde "x" apontaria para um endereço de memória (como na pilha vista) com 2 endereços de memória [2, 3, 2]. Esses dois endereços apontariam para mais três endereços de memória [2, 3, 2] e cada um desses endereços de memória teriam 2 valores [2, 3, 2]. Como muita coisa na informática é feita uma árvore de dados.
Esse post foi um pedaço da aula de orientação a objetos avançada que fiz junto com minha empresa com o professor Agnaldo no centro de treinamento 50 minutos. Achei realmente muito interessante.
Abraços.