La aplicación de impresión .Net Crystal Report se ejecuta en los errores de conexión del servicio de terminal cuando la sesión se desconecta

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

Pregunta

He creado una aplicación .Net para que se ejecute en un servidor de aplicaciones que recibe solicitudes de un informe e imprime el informe solicitado.

La aplicación C # utiliza Crystal Reports para cargar el informe y luego imprimirlo.

La aplicación se ejecuta en el servidor que está conectado a través de una conexión de Escritorio remoto bajo una cuenta de usuario particular (requerido para aplicaciones antiguas). Cuando me desconecto de la sesión remota, la aplicación comienza a generar excepciones como:

Mensaje: CrystalDecisions.Shared.CrystalReportsException: Falló el informe de carga

Este tipo de error nunca se genera cuando la sesión remota está activa. El servidor que ejecuta la aplicación ejecuta Windows Server 2003, mi casilla que crea la conexión es Windows XP.

Aprecio que esto sea bastante extraño, sin embargo, no puedo ver ningún problema con la implementación de la aplicación que he creado.

¿Alguien sabe qué podría ser la causa de este problema?

EDITAR: Mordí la bala y creé la aplicación como un servicio de Windows, obviamente esto no lleva mucho tiempo, simplemente no estaba convencido de que resolvería el problema. De todos modos no lo hace!

También he intentado eliminar el código multihilo que estaba llamando a la función de impresión de forma asíncrona. Hice esto simplemente para simplificar la aplicación y restringir la razón por la que podría fallar. De todos modos, esto tampoco mejoró la situación!

EDITAR: Los dos errores que recibo son:

  

System.Runtime.InteropServices.COMException   (0x80000201): impresora inválida   especificado. a   CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName (String   newVal) en   CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName (String   valor) en   Dsa.PrintServer.Service.Service.PrintCrystalReport (Informe   informe)

La impresora no es inválida, esto se confirma cuando 60 segundos más tarde, el tiempo marca y el informe se imprime correctamente.

Y

  

La solicitud no se pudo enviar   procesamiento de fondo a   CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber (RequestContext   pRequestContext) en   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext   reqContext) --- Fin de interior   rastro de la pila de excepción --- en   CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException (Exception   comer   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext   reqContext) en   CrystalDecisions.CrystalReports.Engine.FormatEngine.PrintToPrinter (Int32   nCopies, booleanas cotejadas, int32   startPageN, Int32 endPageN) en   CrystalDecisions.CrystalReports.Engine.ReportDocument.PrintToPrinter (Int32   nCopies, booleanas cotejadas, int32   startPageN, Int32 endPageN) en   Dsa.PrintServer.Service.Service.PrintCrystalReport (Informe   informe)

EDITAR:

Ejecuté filemon para verificar si hubo algún problema de acceso. En el momento en que se produce el error, los informes de archivo mon

Solicitud: ABIERTO | Ruta: C: \ windows \ assembly \ gac_msil \ system \ 2.0.0.0__b77a5c561934e089 \ ws2_32.dll | Resultado: NO ENCONTRADO | Otro: Error de atributos

¿Fue útil?

Solución

Nuestro problema particular ha sido resuelto. Básicamente, cuando se crearon los informes, se guardaron con información sobre las impresoras. Básicamente, una impresora particular se configuró para el informe y se guardó.

Esta impresora ya no existe, por lo que el informe comenzó a fallar. Básicamente, tuvimos que abrir el diseñador de informes y eliminar cualquier asociación con impresoras en el informe.

Otros consejos

Hemos encontrado estos errores varias veces en los últimos años. Muchas veces he deseado algún mensaje de error más específico.

Primero, verificaría que no hay varias versiones de Crystal Reports instaladas. En nuestra experiencia, encontramos que Crystal Reports 9.0 no parece jugar bien con 10. Desinstalar la versión 9 parece ayudar a algunos de nuestros clientes. Si ambos están instalados, recomiendo encarecidamente desinstalar both , luego reinstalar Crystal Reports 10.

Uno de nuestros primeros errores de Crystal Reports fue el temido " La solicitud no se pudo enviar para su procesamiento en segundo plano. " Los informes funcionarían bien por un tiempo, luego de repente se detendrían. Después de mirar el código, encontré un lugar donde no estábamos desechando un ReportDocument. La eliminación correcta de este documento solucionó el problema.

Últimamente, encontramos una disputa de " La solicitud no se pudo enviar para su procesamiento en segundo plano. " y " Impresora no válida " errores El servidor de un cliente tenía varias impresoras de red definidas por la dirección IP. La impresión funcionaría bien por un tiempo, luego, de repente, bam , el cliente recibió la " Impresora no válida " error y llamó a nuestro soporte.

Un compañero desarrollador corrigió la " Impresora no válida " problema al hacer todo lo siguiente:

  1. Edite y guarde el archivo .rpt en Visual Studio 2005. Mantuvimos el formato de informe compatible con Crystal Reports 9, porque queríamos que nuestros cambios fueran distribuibles a nuestros clientes que aún utilizan versiones anteriores.
  2. Guarde los archivos de Crystal Reports con la etiqueta " Sin impresora " opción. En el menú de Visual Studio 2005, seleccione Crystal Reports / Design / Printer Setup, luego seleccione " No Printer " casilla de verificación.
  3. Cambiamos una fórmula que mostraba " Página N de M " de algo extraño como esto:

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

a esto:

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

Lamentablemente, no tengo idea de cuál (cualquiera o todas) de las acciones anteriores pueden corregir el error. Digo " may " ;, porque por lo que sé, el error desapareció mágicamente debido a algún cambio en la red de TI.

Finalmente, ¿has leído este documento técnico? Si bien no necesariamente resolvió nuestros problemas, fue muy interesante.

Si crea un contenedor de servicios de ventanas para su aplicación, significa que continuará ejecutándose independientemente de los usuarios que hayan iniciado sesión. También se puede configurar para que se inicie automáticamente. Creo que debido a que está utilizando una aplicación real, y no un servicio de Windows, en realidad no se está ejecutando una vez que cierra sesión en el servidor.

Aquí hay un ejemplo en Code Project:

http://www.codeproject.com/KB/system/WindowsService.aspx

¿Estás seguro de que estás " desconectando 'tu sesión remota en lugar de " cerrar sesión " ;. Desconecto mis sesiones a un servidor nt 2003 todo el tiempo y todo sigue funcionando bien. Cerrar la sesión por otro lado matará las aplicaciones que se ejecutan en esa sesión.

¿Qué está ejecutando tu servidor o / s?

Para resolver el problema que ha descrito, debe centrarse en cuál es su problema.

He recibido el Mensaje: CrystalDecisions.Shared.CrystalReportsException: Error al cargar informe varias veces y se debe a que no puede acceder al informe. O bien no existe o, en su situación, no está conectado a la máquina. El error no se debe a nada relacionado con la impresión.

Tuve un problema oscuro que era similar a este, excepto que se trataba de un problema de automatización (shock-horror) con Excel. Encontré que la aplicación funcionó bien cuando conecté mi sesión de escritorio remoto, pero una vez desconectada, daría errores de automatización relacionados con la impresora predeterminada.

Creo que el problema se relaciona con la configuración de la impresora predeterminada cuando se conecta con el escritorio remoto. Suponiendo que tenga un archivo .rdp para iniciar su sesión de escritorio remoto, si lo edita, seleccione la opción " Recursos locales " pestaña, puede ver si comparte o no su impresora local en la sesión remota.

Si está habilitado, esto significa que cuando te conectas, tu impresora local predeterminada se convierte en la impresora predeterminada en la máquina remota. Cuando se desconecte, es posible que la impresora predeterminada de su aplicación aún se refiera a la impresora predeterminada ahora no disponible de su máquina local.

Debería poder resolver esto, asegurándose de no compartir su impresora local, deseleccionando la casilla de verificación Impresora de " Recursos locales " pestaña.

Una solución más sencilla sería deshabilitar " redirección de impresora " en el servidor Consulte https://serverfault.com/questions/5646/how -do-i-disable-remote-printers-using-group-policy para obtener más información.

Si estás viendo en detalle cómo

agregue casillas de verificación en los informes de Crystal en una comunidad booleana y si el campo booleano es falso

anule la selección; de lo contrario, marque la casilla de verificación vea este artículo

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

Después de una larga búsqueda en Google, encontré este enlace pero no lo intenté, porque no hay ningún otro servidor gratuito.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top