André Alves de Lima

Talking about Software Development and more…

Publicando sites com Report Viewer no Azure

Uma dúvida que eu recebo com uma certa frequência tanto por e-mail quanto através dos comentários aqui do site é: como fazer para publicar sites que utilizam o Report Viewer no Azure? No computador de desenvolvimento tudo funciona perfeitamente, porém, quando o site é enviado para o servidor, ele não funciona. O que fazer? Isso é o que eu vou mostrar para você no vídeo de hoje:

O primeiro erro genérico

Se publicarmos um site que utilize Report Viewer com as configurações padrão, nós receberemos um erro bem genérico ao tentarmos acessá-lo no nosso servidor:

Essa mensagem de erro não ajuda em nada, porque ela não fala exatamente qual é o motivo do site não estar sendo carregado. Para obtermos uma mensagem mais detalhada de erro, nós temos que desligar os erros customizados no nosso arquivo web.config, justamente como a mensagem de erro acima nos explicou:

Ao fazermos isso, nós receberemos uma mensagem de erro que faz mais sentido:

Nota: não esqueça de remover essa linha do seu web.config antes de fazer o deploy final do seu site! Com essa linha ativada, o usuário poderia receber informações que ele não deveria ficar sabendo, como mensagens detalhadas de exceções, stack traces, caminhos de arquivos, etc.

Adicionando as referências necessárias

Como podemos perceber na mensagem de erro acima, a dll Microsoft.ReportViewer.Common está faltando. Isso porque, por padrão, ao adicionarmos um controle do Report Viewer no projeto, o Visual Studio só adiciona a referência para a dll Microsoft.ReportViewer.WebForms. No computador de desenvolvimento o projeto funciona sem problemas porque nós temos a runtime do Report Viewer instalada. Porém, ao publicarmos no servidor (que não terá a runtime do Report Viewer instalada), ele não conseguirá encontrar as outras dlls do Report Viewer.

Para resolver esse problema, nós temos que adicionar manualmente as referências para as seguintes dlls no nosso projeto:

– Microsoft.ReportViewer.Common
– Microsoft.ReportViewer.ProcessingObjectModel

Você consegue encontrar essas dlls no GAC, que fica na pasta “C:\Windows\assembly\GAC_MSIL“. Só tome cuidado para adicionar a referência da versão correta do Report Viewer! Confira a versão que foi adicionada da dll Microsoft.ReportViewer.WebForms e utilize a mesma versão na hora de adicionar as outras referências.

Uma vez adicionadas as referências, confira se elas estão configuradas para serem copiadas no diretório da aplicação (Copy Local = True):

Não esqueça do arquivo rdlc!

Com as referências adicionadas, nós conseguiremos carregar o web site normalmente. Porém, pode ser que o arquivo rdlc esteja faltando no seu deployment também. Se esse for o caso, você receberá uma mensagem de erro parecida com esta:

Para corrigir esse problema, configure a opção “Copy to Output Directory” como “Copy always” nos seus arquivos rdlc:

Ao fazer isso, os arquivos rdlc serão copiados na pasta “bin” do seu web site. Na hora de carregar os relatórios, não esqueça de carrega-los da subpasta “bin” também. Exemplo:

SeuReportViewer.LocalReport.ReportPath = MapPath("bin\\SeuRelatorio.rdlc");

Eu precisso da dll Data Visualization?

Se você estiver trabalhando com gráficos nos seus relatórios (ou se você estiver planejando adicionar gráficos nos seus relatórios), você precisará adicionar também a referência à dll Microsoft.ReportViewer.DataVisualization. Siga os mesmos passos apresentados anteriormente para adicionar mais essa referência (encontre a dll no GAC e adicione a referência no projeto).

Concluindo

No vídeo de hoje você conferiu como fazer a distribuição de web sites que utilizem o Report Viewer no Azure. Esses mesmos passos são válidos para qualquer outro servidor que não tenha a runtime do Report Viewer instalada. Basta adicionarmos as referências de todas as dlls do Report Viewer no nosso projeto, configurá-las como “Copy Local” e pronto! Nosso web site funcionará tanto no computador de desenvolvimento quanto no servidor.

Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.

Até a próxima!

André Lima

Photo by Peter Shanks used under Creative Commons
https://pixabay.com/en/startup-start-up-notebooks-creative-593327/
Song Rocket Power Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0 License
http://creativecommons.org/licenses/by/3.0/

Newsletter do André Lima

* indicates required



Powered by MailChimp

4 thoughts on “Publicando sites com Report Viewer no Azure

  • André Ferreira disse:

    Olá xará, então eu também sempre distribuo as DLL porém pude perceber (e no seu vídeo também aconteceu), que o ícone da impressora não aparece. Sabe me dizer porque isso acontece?

    Show de bola o vídeo e a dica.

    Parabéns

    André Ferreira

    • andrealveslima disse:

      Olá André, obrigado pelo comentário!

      O controle do Report Viewer utiliza ActiveX para fazer a impressão pelo componente web.. E ele só deve funcionar no Internet Explorer 9 ou inferior.. Em outros browsers normalmente o ícone de impressão não aparece mesmo e a saída é gerar o PDF do relatório para que o usuário possa imprimí-lo.. Veja mais detalhes nesta thread do StackOverflow:

      Report Viewer Print Button in IE 11

      Abraço!
      André Lima

  • alex disse:

    Oi André.

    Fiz todo o procedimento do vídeo e estou com a seguinte falha:

    Parameter is not valid.

    Poderia me ajudar?

    • andrealveslima disse:

      Olá Alex!

      O erro é exatamente só esse mesmo? Ou você tem mais detalhes, com stack trace, etc? O seu relatório utiliza parâmetros? Você já tentou com um projeto novo “do zero” para ver se o problema não está nesse seu projeto específico?

      Abraço!
      André Lima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *