Report Viewer não renderiza no IIS 7

by Cássio R Eskelsen 26. março 2009 14:24

Se você usa o Report Services e pretende utilizar (ou usa) o Report Viewer  em apliações ASP.Net, pode receber o seguinte erro ao executar a web app em um servidor com IIS: The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

Isso ocorre pois o IIS 7 não possui um handler para Reserved.ReportViewerWebControl.axd . Resolver isso é fácil e existem duas formas:

Via Gerenciador do IIS (Painel de Controle/Ferramentas Adm):


Selecione o seu site e abra a opção Handler Mappings:

image

Depois, no lado direito, selecione Add Managed Handler:

Leia mais...

Tags:

.Net | asp.net

Minha experiência com o Windows Azure

by Cássio R Eskelsen 22. março 2009 16:45

Sei que esse é um YAWAP (yet another Windows Azure post) já que existem por aí bom artigos sobre o Azure, mas talvez possa trazer alguns elementos novos para quem, assim como eu, está começando a viver nas nuvens!

O Windows Azure

Para quem ainda não conhece, o Windows Azure é uma plataforma da Microsoft para rodar aplicações em esquema de Cloud Computing, ou seja, rodando em um farm de servidores. Obviamente não basta pegar qualquer aplicação é subí-la para o datacenter: ela precisa estar preparada para rodar na nuvem. No caso específico do Windows Azure, essas aplicações deverão ser feitas em .Net. Quem já tem aplicações muito bem estruturadas em termos de arquitetura não terá muito problema para rodar sua aplicação na nuvem, apenas terá um trabalho pesado na layer de persistência.

A aplicação que pretendo fazer

image Pretendo colocar nas nuvens uma aplicação que modelei a quase 10 anos atrás e da qual já existe uma versão rodando feita em Delphi e que é mantida pela empresa onde fui sócio. Tenho toda análise pronta, incluindo algoritmos (sim, milagre!), então não precisarei me preocupar com regras de negócio. Como na  época a OO ainda era algo novo para mim, talvez tenha que fazer alguns ajustes agora.

Essa aplicação calcula os custos de uma empresa de serviços utilizando a metodologia RKW. Essa metodologia também é conhecida como Método dos Centros de Custos, Método das Seções Homogêneas, Mapa de Localização de Custos ou ainda, Custeio Pleno. Essa metodologia foi criada na primeira metade do século 20 na Alemanha, por isso tem como nome as iniciais do conselho governamental alemão para assuntos econômicos (Reichskuratorium für Wirtschaftlichtkeit).

Saliento que esse post é focado na descrição da minha experiência com o Azure em uma aplicação LoB e não em detalhes da implementação da solução em si, já que necessitaria de vários posts para isso!

Esse post estou escrevendo enquanto desenvolvo a aplicação, então ainda não sei se tudo que pretendo funcionará no Azure.

Leia mais...

Tags: , ,

Arquitetura | .Net

Dica Rápida: Editor XML do Visual Studio "sumiu"

by Cássio R Eskelsen 16. março 2009 15:26

Logo que instalei o Visual Studio em minha máquina recém formatada, recebi a mensagem  "Some XML Package failed to load ... " na primeira execução do VS. Toquei adiante e percebi que o editor de xml (o que edita o web.config, app.config entre outras coisas) simples sumiu, ou seja, eu editava esses arquivos como se fossem texto puro.

Deixei isso quieto até me incomodar de vez e resolvi procurar uma solução. Não descobri o motivo do erro, mas encontrei um comando que resolveu minha situação:

\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv /ResetSkipPkgs

Obviamente você deve ajustar o comando para apontar para a localização do seu diretório Common7\IDE.

Esse comando starta o Visual Studio e reseta todos os arquivos de configuração suprimidos pelo Visual Studio.

Tags:

.Net

Meme sobre padrões de interface

by Cássio R Eskelsen 26. fevereiro 2009 09:56

A Infragistics, tradicional fabricante de componentes .Net, criou o Quince,  um meme para o compartilhamento de padrões de projeto. Pelo que percebi, o foco são padrões de interface para projetos .Net.

 

Cada meme possui um descritivo do problema, comentários e solução proposta.

É uma idéia interessante pois auxilia naqueles momentos em que você não sabe como resolver detalhes de uma interface visual, desde coisas simples como “alinho os labels à esquerda ou acima?” até como criar uma interface para um sistema de monitoramento de tempo real.

O projeto segue o padrão Web 2.0: você pode compartilhar seus próprios padrões.

E para finalizar, o mais legal de tudo: totalmente feito em Silverlight. A interface ficou muito leve e prática. Obviamente também é um showcase dos componentes da Infragistics.

Site: http://quince.infragistics.com

Descobri o site pelo blog do Otávio.

Tags: , , ,

.Net | Design Pattern

ASP.Net MVC RC 1 e … bug!

by Cássio R Eskelsen 24. fevereiro 2009 00:28

Alguns dias atrás puxeio RC 1 do ASP.NET MVC. Muitas features novas, incluindo a eliminacao da necessidade de haver um arquivo .cs para um view (exemplo clienteupdate.aspx.cs) e um wizard que faz uma espécie de scaffolding do model.

O único detalhe é que em determinadas situações isso não está funcionando, principalmente quando você separa seu sistema em camadas. Por exemplo, suponha que você tenha uma classe Cidade que está no assembly Endereco.DLL e uma classe Cliente no assembly Cadastro.DLL (sim, essas DLL são bizarras, só servem para exemplificação). Digamos que na classe Cliente você tenha uma propriedade do tipo Cidade.
Se você tentar criar um view fortemente tipado da classe Cliente você receberá um belo erro:

image 

Se você resolver não usar o scaffolding mas quiser usar o novo modo que elimina a necessidade do .aspx.cs como abaixo:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
AutoEventWireup="true" Inherits="System.Web.Mvc.ViewPage<Dominio.Cliente>"

Você continuará a ter um problema, ou seja, o RC do MVC não permite carregar uma classe que tenha uma propriedade que esteja em outro assembly.

Para resolver esse problema, por enquanto você pode continuar no esquema antigo, que é possuir um .aspx.cs para cada view:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true"
    CodeBehind="Show.aspx.cs" Inherits="Dominio.Cliente" %>

ScottGu comentou que o problema já foi detectado e que será corrigido na versão final do ASP.NET MVC.

Tags:

.Net | asp.net

Sql Compact 2008 – Esse ilustre desconhecido

by Cássio R Eskelsen 10. janeiro 2009 09:36

Creio que uma das edições menos conhecidas (ou mais desprezadas) do Sql Server seja a Compact Edition.

Antigamente sempre sonhávamos com um banco de dados simples para pequenas aplicações e que não requeresse a instalação de um monstrengo (ou a utilização de aberrações como o Access e/ou Paradox). Creio que hoje em dia como boa parte das aplicações está indo para a WEB e existem outras alternativas (como armazenar dados em XML), a procura por uma versão lightweight  de gerenciador de banco de dados tenha diminuido.

No entanto, sempre existirão as aplicações “Offline” que precisam rodar em um notebook desconectado, um smartphone ou PDA, ou ainda, uma aplicação leve que você quer distribuir pela Net. Para esses casos o Sql Compact 2008 é perfeito.

O Sql Compact é embedded, ou seja, roda no contexto da aplicação, não requerendo a instalação de um servidor. Obviamente isso tem algum custo e o custo é o corte de algumas features. Você não pode, por exemplo, rodar stored procedures.

Longe de querer fazer um tutorial extensivo, quero com esse post apenas relacionar alguns recursos disponíveis na net e passar algumas dicas (coisas que estou aprendendo aqui na porrada).

Links Interessantes:

A página do produto: http://www.microsoft.com/Sqlserver/2008/en/us/compact.aspx

Microsoft SQL Server Compact 3.5 Books Online and Samples (versão offline): http://www.microsoft.com/downloads/details.aspx?FamilyID=1ff0529a-eb1f-4044-b4b7-40b00710f7b7

Tutorial: Introducing Microsoft SQL Server Compact Edition (Part I)(parte 2 linkada no texto. A parte dois trata dos serviços de sincronização)

Veja abaixo algumas dicas rápidas: 

Leia mais...

Tags:

.Net | Banco de Dados

Determinando a orientação dos pontos de um polígono

by Cássio R Eskelsen 8. janeiro 2009 14:38

Em um sistema georeferenciado quando trabalhamos com polígonos precisamos saber qual é a orientação dos pontos do polígono: horário ou anti-horário.

Polígono no sentido horário 
Polígono com pontos no sentido horário

image  
Polígono com pontos no sentido anti-horário

Falando mais especificamente, quando persistimos um polígono em uma base de dados (como o SQL Server 2008) precisamos garantir que o ordenamento é o correto. No caso do Sql Server, os segmentos externos de um polígono precisam estar orientados no sentido anti-horário.

Para determinar a orientação de um polígono, disponibilizo a seguir uma pequena função.

Como retirei essa função de dentro de meus projetos, simplifiquei um pouco os objetos espaciais para facilitar a compreensão aqui

Basicamente considero um polígono um conjunto de coordenadas que por sua vez são formadas por um par longitude/latitude.
Alguns preferem tratar os polígonos como um conjunto de segmentos de reta, mas para as minhas necessidades isso não é preciso.

Não deve-se esquecer que um polígono deve ser fechado, ou seja, o último ponto deve ser igual ao primeiro.

Com poucas adaptações essa função pode trabalhar também com dados geométricos ao invés de dados geográficos.

Adicionei também um pequeno método que permite inverter a ordem dos pontos. Nada mais do que um wrapper para um método do próprio .Net

No final, criei um pequeno exemplo de como utilizar o método, mostrando a ordem original de cada polígono, invertendo suas ordens e mostrando a nova ordem.

Leia mais...

Tags: , ,

.Net | Geo

Debug Remoto de aplicações .net

by Cássio R Eskelsen 20. outubro 2008 14:13

Quem trabalha no desenvolvimento de aplicações asp.net deve ter se deparado várias vezes com a necessidade de depurar código diretamente no servidor de produção (ou de testes). Situações como implementação de operações de cartões de crédito em B2C são difíceis de se reproduzir na máquina de desenvolvimento pois envolvem callback externo.

Se você tem acesso ao seu servidor, pode utilizar o recurso de debug remoto do Visual Studio. É algo relativamente trivial de ser feito, mas pouco comentado.

Leia mais...

Tags:

.Net

Design Patterns – Parte 2 - Observer

by Cássio R Eskelsen 23. setembro 2008 16:54

Continuando a série Design Patterns, nessa parte 2 iremos ver o padrão Observer.

Suponha que você tenha uma linha de produção que é automaticamente alimentada de componentes por diversos robôs assim que entra um novo pedido. Cada robô solta um determinado número de peças por quantidade de pedido.

Uma primeira abordagem seria algo como abaixo:

using System;

namespace NadaObserver
{
    class Program
    {
        static void Main(string[] args)
        {
            LinhaProducao linha1 = new LinhaProducao();
            Robo wallE = new Robo("Wall-E",linha1, 1);
            Robo c3po = new Robo("C3PO", linha1, 10);
            Robo sonny = new Robo("Sonny", linha1, 20);
            Robo terminator = new Robo("Terminator 800", linha1, 1000);

            //entrou novo pedido de 10 peças
            Pedido ped = new Pedido(10);
            
            // põe o povo para trabalhar

            wallE.SuprirPecas(ped.QtPedido);
            c3po.SuprirPecas(ped.QtPedido);
            sonny.SuprirPecas(ped.QtPedido);

            Console.ReadLine();
            
        }
    }

    public class Pedido{

        public Pedido(int qtPedido)
        {
            this.QtPedido = qtPedido;
        }

        public int QtPedido { get; set; }
       
    }


    public class LinhaProducao{

        public LinhaProducao()
        {
        }

        public void ReceberPecasDoRobo(int qtPecas)
        {
            Console.WriteLine("Recebi {0} peças para montagem", qtPecas);
        }
    }

    public class Robo
    {
        private int _fatorPecasPorPedido = 1;
        
        private LinhaProducao _linhaDeProducao = null;

        public Robo(string nomeRobo, LinhaProducao linhaDeProducao, int fatorPecasPorPedido)
        {
            this.NomeRobo = nomeRobo;
            this._linhaDeProducao = linhaDeProducao;
            this._fatorPecasPorPedido = fatorPecasPorPedido;
        }

        public string NomeRobo { get; set; }

        public void SuprirPecas(int qtItensPedido)
        {
            this._linhaDeProducao.ReceberPecasDoRobo(qtItensPedido * this._fatorPecasPorPedido);
        }
 
    }
}

Além de deselegante, essa solução trás alguns problemas: a aplicação chamadora sempre deverá saber quais são os robôs que estão ligados à cada linha de produção.

Leia mais...

Tags: ,

Design Pattern | .Net

Windows Live ID Web Authentication

by Cássio R Eskelsen 20. setembro 2008 14:15

Talvez uma das coisas que mais perturbam os usuários da web seja a necessidade de decorar vários logins e senhas para os diversos sites onde eles possuam uma conta.

Para solucionar isso existem várias iniciativas de se criar “passaportes universais”, como por exemplo, o OpenId.

A Microsoft disponibiliza também uma solução para isso, o Windows Live ID Web Authentication com o qual os usuários podem se logar nos sites usando a mesma conta do Hotmail/MSN. Para os desenvolvedores é uma solução interessante pois traz agilidade na autenticação para milhões de pessoas que já possuem uma conta no MSN.

O WLIWA (abreviando) é um serviço altamente escalável pois fornece, segundo a Microsoft, mais de 22 bilhões de autenticações/mês (cada vez que uma pessoa entra no MSN ela está se autenticando pelo WLIWA). A segurança dele é auditada constantemente o que nos dá uma segurança a mais. Considerando as preocupações que temos com segurança, deixar a autenticação com um especialista já nos poupa muito trabalho.

Veja no diagrama abaixo  como funciona  o processo de autenticação:

untitled

Perceba pelos ítens 3 a 7 que o usuário passa seus dados de autenticação DIRETO para o Windows Live Id. Seu site não toma conhecimento dos dados de login do usuário (o que é uma segurança para o seu usuário).
Assim que a autenticação for concluída com sucesso, o WLIWA retorna para o seu site um token com o identificador único do usuário. Esse token você irá usar para autenticar o usuário em sua aplicação.

 

Leia mais...

Tags: , , ,

.Net | asp.net