quarta-feira, 30 de outubro de 2013

Erro 417 : Expectation Failed – Como resolver?



















As vezes, quando acessamos alguns servidores utilizando o .NET, recebemos esse erro : Expectation Failed.

Tenho percebido que esse erro ocorre principalmente no acesso a internet através de servidores de proxy, porém já vi acontecer em outras situações.

O que esse erro significa?

O Framework (.NET) faz o envio de dados para os servidores em duas etapas distintas, implementando um padrão existente no HTTP 1.1. Primeiro envia apenas os headers (cabeçalhos) para o servidor, esperando que o servidor responda se ele suporta ou não essa requisição, em seguida, caso haja uma resposta positiva do servidor, envia os dados, caso contrário o erro “Expectation Failed” é exibido (no caso a resposta negativa do servidor).

Podemos resolver isso de uma forma bem simples, basta desativar o envio em duas etapas através de uma configuração no Web.Config, conforme abaixo:

<system.net>
   <settings>
      <servicePointManager expect100Continue="false" />
   </settings>
</system.net>

segunda-feira, 28 de outubro de 2013

Dica - Anti-vírus no servidor com ClamWin Free



















Em muitos fóruns vejo a seguinte pergunta: Qual o melhor anti-vírus para o meu servidor?! Oras, isso é uma questão muito relativa, pois antes de escolher o anti-vírus (AV) do seu servidor, você tem que saber quais serviçso rodam no seu servidor.

Por exemplo, se você roda o Exchange Server, precisa de um AV com agente para escanear as mensagens que entram e saem. Então, falar para definir o melhor AV é muito relativo, e é preciso saber quanto seguro ($$$) queremos ficar. Uma solução completa de AV Corporativo, com agentes, atualizações centralizadas, e todas as "features" fazem o preço disparar, então vou dar uma solução gratuita para servidores de arquivos, e infraestrutura (AD, DNS, DHCP, Impressão, Banco de Dados).

Eu sempre ouvia falar muito bem do ClamWin Free, porém ele não tem proteção em tempo real, ou seja, você baixa e armazena o vírus, pois ele não é ativo, não análisa, e deixa você executar o mesmo, então posso dizer que não trás tanta segurança assim. Depois de muitas pesquisas, e alguns testes encontrei uma ferramenta para ser utilizada com o ClamWin Free, que faz a proteção em tempo real, que é o software que se chama Clam Sentinel. Além da proteção ele faz:


  • Detecção de invasão (ataque hacker)
  • Proteção heurística pró-ativa
  • Proteção em USB e drivers removíveis
  • Coloca arquivos em quarentena
  • Fácil configuração pelo system tray
  • Scan em tempo real de drives, memória, e mensagens
  • Suporta Windows 98
  • Suporte a várias línguas
Link para Download do ClamWin Free: ClamWin Free 0.98
Link para Download do Clam Sentinel: Clam Sentinel


Depois de baixa-los, execute primeiro o ClamWin Free, faça a instalação padrão.













Marque a opção para fazer o Download do Banco de Dados das definições de vírus.













Instalando...














Automaticante ele faz o download das definições do vírus.












Finalizando a instalação.














Agora vamos instalar o Clam Sentinel. Execute o setup, e selecione o idioma.









Selecione a opção para iniciar automaticamente para todos usuários:













Siga os passos de uma instalação padrão. Finalize a instalação. Marque para executar o sentinela.













Logo na primeira tela você já informa as unidades a serem monitoradas.







Pronto... Agora você já tem um excelente serviço de AV rodando em seu servidor, e com proteção em tempo-real. Para afinar as configirações clique no system tray (ao lado do relógio) sobre o ícone do Clam Sentinel e faça algumas configurações.

sexta-feira, 25 de outubro de 2013

SQL Check Reference - Validar relacionamentos entre tabelas



















Em projetos mal estruturados, e mal documentados, sempre que precisamos fazer uma manutenção em um sistema "desconhecido", sem o relacionamento de dados, é necessário fazer um mapeamento manual, com consultas e mais consultas para tentar identificar os relacionamentos. Mas e se o banco tem 600 tabelas?! Torna-se uma missão quase impossível.

Diante dessa dificuldade desenvolvi uma simples aplicação em C#, que você informa os dados da conexão com o banco de dados, e o nome da Chave Primária que você quer verificar se existem ou não relacionamentos. Você ainda pode apontar um determinado valor, ou um range de valores separados por vírgula para saber em quais tabelas estes registros se relacionam.

Foi desenvolvido em um ambiente com Windows 7, e testado nas versões 2000, 2005, e 2008 do Microsoft SQL Server.

- Não funciona com outro banco de dados (apenas MS SQL Server)
- É necessário ter o Framework 4.0 instalado para rodar o aplicativo

O software é FREEWARE.
Nome do Programa: SQL Check References

Link para download: http://www.superdownloads.com.br/download/62/sql-check-references/

Estou aberto a receber sugestões e críticas para melhorar o sistema.

SQL Check References

quarta-feira, 9 de outubro de 2013

SQL - Concatenar registros de várias linhas com COALESCE



















Ontem me deparei com um "problema"... Precisava concatenar os registros do banco de dados em uma aplicação, até ai sem problemas, é só fazer um LOOP no retorno do banco, concatenar e pronto! Não... Não poderia ser feito assim, pois para fazermos uma alteração na aplicação, a mesma precisa passar de desenvolvimento para homologação (passo esse que demora), para só depois ir para o ambiente de produção. Quando a alteração/manutenção é feita no Banco é bem mais rápido, quase instantâneo, menos burocrático.

Tive a idéia de fazer o mesmo LOOP no SQL (mesmo não sendo adepto a essa prática), mas sem sucesso. Eis que pesquisando um pouco achei o comando COALESCE... E não é que era EXATAMENTE o que eu precisava?!

Tem uma síntaxe simples... Rápida... Vejamos o código:

-- Variável para receber os registros da tabela separados por ","
DECLARE @Lista VARCHAR(80)

-- Define o valor para vazio
SET @Lista = ''

-- Seleciona o registro, e coloca na variável
SELECT @Lista = @Lista + ',' + COALESCE(CAMPO_DA_TABELA, '') FROM TABELA

-- Remove primeira "," da variável
SET @Lista = SUBSTRING(@Lista, 2, LEN(@Lista))

-- Exibe os resultados da variável
SELECT @Lista

Essa aqui foi uma solução que encontrei para fazer um select de múltiplos registros na mesma linha, separando-os por vírgula.

Você pode trocar o separador conforme a sua necessidade, pode ser um pipe "|", ponto e vírgula ";", ponto ".", ou qualquer outro carctere a sua escolha.