.NET Crystal Report Printing Application em execução em erros de conexão do serviço Termanal quando a sessão é desconectada

StackOverflow https://stackoverflow.com/questions/602295

Pergunta

Eu criei um aplicativo .NET para ser executado em um servidor de aplicativos que recebe solicitações de um relatório e imprime o relatório solicitado.

O aplicativo C# usa relatórios de cristal para carregar o relatório e, posteriormente, imprimi -lo.

O aplicativo é executado no servidor que está conectado através de uma conexão de desktop remota em uma conta de usuário específica (necessária para aplicativos antigos). Quando me desconecto da sessão remota, o aplicativo começa a aumentar exceções como:

Mensagem: CrystalCisions.Shared.CrystalReportSexception: Load Relation falhou

Esse tipo de erro nunca é levantado quando a sessão remota está ativa. O servidor executando o aplicativo está executando o Windows Server 2003, minha caixa que cria a conexão é o Windows XP.

Agradeço que isso é bastante estranho, no entanto, não consigo ver nenhum problema com a implantação do aplicativo que criei.

Alguém sabe o que poderia ser causado por esse problema?

Editar: mordi a bala e criei o aplicativo como um serviço do Windows, obviamente isso não leva muito tempo, eu não estava convencido de que resolvesse o problema. De qualquer forma, não !!!

Eu também tentei remover o código multi-thread que estava chamando a função de impressão de forma assíncrona. Eu fiz isso para simplesmente o aplicativo e restringir o motivo pelo qual ele poderia falhar. Enfim, isso também não melhorou a situação!

Editar: os dois erros que recebo são:

System.Runtime.Interropservices.comexception (0x80000201): impressora inválida especificada. at CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName(String newVal) at CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName(String value) at Dsa.PrintServer.Service.Service.PrintCrystalReport(Report report)

A impressora não é inválida, isso é confirmado quando 60 segundos depois o tempo ticks e o relatório é impresso com sucesso.

E

A solicitação não pôde ser enviada para processamento em segundo plano. at CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber(RequestContext pRequestContext) at CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext reqContext) --- End of inner exception stack trace --- at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) em CrystalDecisions.ReportSource.eromReportSourceBase.getLastPageNumber (reportPageRequestContext reqcontext) em CrystalDecisions.crystalreports.engine.formatEngine.printToprInter (Int32 ncopies, boolean colando, Int2S. Completo, Int32 Startpagen, Int32 Endpagen) em dsa.printserver.service.service.printCrystalreport (relatório relatório)

EDITAR:

Eu corri Filemon para verificar se havia algum problema de acesso. No ponto em que o erro ocorre o arquivo Mon relatórios

Solicitação: aberto | Caminho: C: Windows Assembly GAC_MSIL System 2.0.0.0__B77A5C561934E089 WS2_32.DLL | Resultado: Não encontrado | Outros: Erro de atributos

Foi útil?

Solução

Nosso problema particular foi resolvido. Basicamente, quando os relatórios foram criados, eles foram salvos com informações sobre impressoras. Basicamente, uma impressora específica foi definida para o relatório e salva.

Esta impressora não existe mais, e é por isso que o relatório começou a falhar. Basicamente, tivemos que abrir o designer do relatório e remover qualquer associação com impressoras no relatório.

Outras dicas

Encontramos esses erros várias vezes nos últimos anos. Muitas vezes eu desejei uma mensagem de erro mais específica.

Primeiro, eu verificaria que não existem várias versões de relatórios de cristal instalados. Em nossa extensão, descobrimos que o Crystal Reports 9.0 não parece jogar bem com 10. A desinstalação da versão 9 parecia ajudar alguns de nossos clientes. Se ambos estiverem instalados, recomendo a desinstalação Ambas, então reinstalando os relatórios de Crystal 10.

Um de nossos primeiros erros de relatórios de cristal foi o temido "A solicitação não pôde ser enviada para processamento de fundo". Os relatórios funcionariam bem por um tempo, então de repente eles paravam. Depois de olhar para o código, encontrei um lugar onde não estávamos descartando um documentador de relatórios. Dispondo corretamente este documento corrigiu o problema.

Ultimamente, atingimos uma briga de "a solicitação não pôde ser enviada para processamento de fundo". e erros de "impressora inválida". O servidor de um cliente tinha várias impressoras de rede definidas por endereço IP. A impressão funcionaria muito bem por um tempo, então de repente, bam, o cliente recebeu o erro "impressora inválida" e chamou nosso suporte.

Um colega desenvolvedor corrigiu o problema da "impressora inválida" fazendo todas as seguintes coisas:

  1. Editar e salvar o arquivo .rpt no Visual Studio 2005. Estávamos mantendo o formato de relatório compatível com o Crystal Reports 9, porque queríamos que nossas alterações fossem distribuíveis aos nossos clientes ainda usando versões mais antigas.
  2. Salve os arquivos Crystal Reports com a opção "sem impressora". No menu Visual Studio 2005, selecione Crystal Reports/Design/Impressor Configure e selecione a caixa de seleção "sem impressora".
  3. Mudamos uma fórmula que exibia "página n de m" de algo estranho como este:

"Page " + Left (CStr (PageNumber), Length (CStr (PageNumber)) - 3) +
" of " + Left (CStr (TotalPageCount), Length (CStr (TotalPageCount)) - 3)

para isso:

"Page " + CStr(PageNumber,0) + " of " + CStr(TotalPageCount,0)

Infelizmente, não tenho idéia de qual (qualquer ou todos) das ações acima podem corrigir o erro. Eu digo "maio", porque pelo que sei, o erro foi embora magicamente por causa de algumas mudanças de rede de TI.

Finalmente, você leu este white paper? Embora não tenha necessariamente resolvido nossos problemas, foi muito interessante.

Se você criar um wrapper de serviço de janela para o seu aplicativo, isso significa que ele continuará sendo executado independentemente do login dos usuários. Ele também pode ser configurado para iniciar automaticamente. Eu acho que, porque você está usando um aplicativo real, e não um serviço do Windows, ele não está realmente sendo executado quando você logout de uma sessão no servidor.

Aqui está um exemplo no projeto de código:

http://www.codeproject.com/kb/system/windowsservice.aspx

Tem certeza de que está "desconectando 'sua sessão remota, em vez de" fazer login ". Desconeci minhas sessões a um servidor NT 2003 o tempo todo e tudo para continuar correndo bem. O login por outro lado matará os aplicativos correndo nessa sessão.

Qual é o seu servidor O/S em execução?

Para resolver o problema que você descreveu, você precisa se concentrar em qual é o seu problema.

Recebi a mensagem: CrystalCisions.Shared.CrystalReportSexception: O relatório de carga falhou várias vezes e se deve ao fato de que você não pode acessar o relatório. Ou não existe ou, na sua situação, você não está conectado à máquina. O erro não se deve a nada relacionado à impressão.

Eu tive uma questão obscura que era semelhante a isso, exceto que era um problema de automação (horror de choque) no Excel. Achei que o aplicativo funcionava bem quando eu tinha minha sessão de desktop remota conectada, mas uma vez desconectada, ele daria erros de automação relacionados à impressora padrão.

Acredito que o problema está relacionado à forma como a impressora padrão está definida quando você se conecta com a área de trabalho remota. Supondo que você tenha um arquivo .rdp para iniciar sua sessão de desktop remota, se você editá -lo e selecione a guia "Recursos locais", você pode ver se você compartilha ou não sua impressora local na sessão remota.

Se estiver ativado, isso significa que, quando você se conecta, a impressora padrão local se tornará a impressora padrão na máquina remota. Ao desconectar, a impressora padrão do seu aplicativo ainda se refere à impressora padrão agora indisponível da sua máquina local.

Você deve resolver isso, garantindo que não compartilhe sua impressora local, desmarcando a caixa de seleção da impressora na guia "Recursos locais".

Uma solução mais fácil seria desativar a "redirecionamento da impressora" no servidor. Ver https://serverfault.com/questions/5646/how-do-i-disable-romote-printers-using-group-policy Para maiores informações.

Se você está procurando em detalhes como

Adicione caixas de seleção em relatórios de cristal em uma feild booleana e se o campo booleano for falso

desmarque mais, verifique a caixa de seleção visualizar este artigo

http://checkboxcrystalreport.blogspot.com/2009/07/printing-checkbox-crystal-report-for.html

Depois de pesquisar no Google muito, encontrei este link, mas não tentei, porque nenhum outro servidor gratuito.

http://www.microsoft.com/technet/security/bulletin/ms04-017.mspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top