L'application d'impression .Net Crystal Report s'exécutant sur des erreurs de connexion au service de terminal lorsque la session est déconnectée

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

Question

J'ai créé une application .Net à exécuter sur un serveur d'applications, qui reçoit les demandes de rapport et imprime le rapport demandé.

L'application C # utilise Crystal Reports pour charger le rapport et l'imprimer par la suite.

L'application est exécutée sur un serveur auquel est connecté via une connexion Remote Desktop sous un compte utilisateur particulier (requis pour les anciennes applications). Lorsque je me déconnecte de la session distante, l'application commence à générer des exceptions telles que:

Message: CrystalDecisions.Shared.CrystalReportsException: Le rapport de chargement a échoué

Ce type d'erreur n'est jamais déclenché lorsque la session à distance est active. Le serveur exécutant l'application exécute Windows Server 2003, ma boîte de dialogue qui crée la connexion est Windows XP.

Je comprends que c'est assez étrange, mais je ne vois aucun problème avec le déploiement d'applications que j'ai créé.

Quelqu'un sait-il ce qui pourrait causer ce problème?

EDIT: J'ai mordu la balle et créé l'application en tant que service Windows. Évidemment, cela n'a pas pris longtemps, je n'étais tout simplement pas convaincu que cela résoudrait le problème. Quoi qu'il en soit, ce n'est pas le cas !!!

J'ai également essayé de supprimer le code multi-thread qui appelait la fonction d'impression de manière asynchrone. Je l'ai fait afin de simplement utiliser l'application et de préciser la raison de son échec. Quoi qu'il en soit, cela n'a pas amélioré la situation non plus!

EDIT: les deux erreurs que je reçois sont les suivantes:

  

System.Runtime.InteropServices.COMException   (0x80000201): Imprimante non valide   spécifié. à   CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName (Chaîne   newVal) à   CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName (Chaîne   valeur) à   Dsa.PrintServer.Service.Service.PrintCrystalReport (Rapport   rapport)

L’imprimante n’est pas invalide. Cette erreur est confirmée 60 secondes plus tard, le temps est écoulé et le rapport est correctement imprimé.

Et

  

La demande n'a pas pu être soumise pour   traitement en arrière-plan. à   CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber (RequestContext   pRequestContext) à   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext   reqContext) --- Fin de l’intérieur   trace de pile d'exception --- at   CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException (Exception   e) à   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext   reqContext) à   CrystalDecisions.CrystalReports.Engine.FormatEngine.PrintToPrinter (Int32   nCopies, Booléen assemblé, Int32   startPageN, Int32 endPageN) à l'adresse   CrystalDecisions.CrystalReports.Engine.ReportDocument.PrintToPrinter (Int32   nCopies, Booléen assemblé, Int32   startPageN, Int32 endPageN) à l'adresse   Dsa.PrintServer.Service.Service.PrintCrystalReport (Rapport   rapport)

EDIT:

J'ai exécuté filemon pour vérifier s'il y avait un problème d'accès. Au moment où l’erreur se produit, le fichier mon reports

Requête: OPEN | Chemin d'accès: C: \ windows \ assembly \ gac_msil \ system \ 2.0.0.0__b77a5c561934e089 \ ws2_32.dll | Résultat: NOT FOUND | Autre: erreur d'attributs

Était-ce utile?

La solution

Notre problème particulier a été résolu. Lorsque les rapports ont été créés, ils ont été enregistrés avec des informations sur les imprimantes. En gros, une imprimante particulière avait été définie pour le rapport et enregistrée.

Cette imprimante n'existe plus, c'est pourquoi le rapport a commencé à échouer. En gros, nous devions ouvrir le concepteur de rapport et supprimer toute association avec les imprimantes du rapport.

Autres conseils

Nous avons rencontré ces erreurs à plusieurs reprises au cours des dernières années. Plusieurs fois, j'ai souhaité un message d'erreur plus spécifique.

Tout d'abord, je vérifierais qu'il n'y a pas plusieurs versions de Crystal Reports installées. Dans notre expérience, nous avons constaté que Crystal Reports 9.0 ne semblait pas bien fonctionner avec 10. La désinstallation de la version 9 semblait aider certains de nos clients. Si les deux sont installés, je recommande vivement de désinstaller les deux , puis de réinstaller Crystal Reports 10.

L’une de nos premières erreurs dans Crystal Reports était la redoutée "La demande n’a pas pu être soumise pour traitement en arrière-plan." Les rapports fonctionneraient bien pendant un moment, puis tout à coup ils s'arrêteraient. Après avoir examiné le code, j'ai trouvé un endroit où nous ne disposions pas d'un ReportDocument. La suppression correcte de ce document a résolu le problème.

Dernièrement, nous avons trouvé une séquence de "La requête n'a pas pu être soumise pour le traitement en arrière-plan". et "Imprimante non valide". les erreurs. Le serveur d'un client avait plusieurs imprimantes réseau définies par une adresse IP. L'impression fonctionnait parfaitement pendant un moment, puis tout à coup, bam , le client a reçu le message "Imprimante non valide". erreur et a appelé notre support.

Un collègue développeur a corrigé l'option "Imprimante non valide". problème en faisant toutes les choses suivantes:

  1. Modifiez et enregistrez le fichier .rpt dans Visual Studio 2005. Nous avions gardé le format de rapport compatible avec Crystal Reports 9, car nous souhaitions que nos modifications puissent être diffusées aux clients utilisant encore des versions antérieures.
  2. Enregistrez les fichiers Crystal Reports avec le message "Aucune imprimante". option. Dans le menu Visual Studio 2005, sélectionnez Crystal Reports / Design / Printer Setup, puis sélectionnez le paramètre "Aucune imprimante". case à cocher.
  3. Nous avons modifié une formule affichant """ La page N sur M ". de quelque chose d'étrange comme ça:

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

à ceci:

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

Malheureusement, je n'ai aucune idée de ce qui (l'une ou toutes) des actions ci-dessus pourrait réparer l'erreur. Je dis "peut", car, pour tout ce que je sais, l’erreur est disparue comme par magie à cause d’un changement de réseau informatique.

Enfin, avez-vous lu ce livre blanc? Il n'a pas nécessairement résolu nos problèmes, mais il était très intéressant.

Si vous créez un wrapper de service de fenêtre pour votre application, cela signifie qu'il continuera à être exécuté quels que soient les utilisateurs connectés. Il peut également être configuré pour démarrer automatiquement. Je pense que, parce que vous utilisez une application réelle et non un service Windows, il ne s'exécute pas réellement une fois que vous vous êtes déconnecté d'une session sur le serveur.

Voici un exemple de projet de code:

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

Êtes-vous sûr de vous "déconnecter" de votre session distante au lieu de vous "déconnecter". Je déconnecte mes sessions sur un serveur NT 2003 tout le temps et tout continue à fonctionner correctement. La déconnexion, par contre, tuera les applications exécutées dans cette session.

Quel est votre serveur o / s en cours d'exécution?

Afin de résoudre le problème que vous avez décrit, vous devez vous concentrer sur son problème.

j'ai reçu le Message: CrystalDecisions.Shared.CrystalReportsException: Le rapport de chargement a échoué plusieurs fois et cela est dû au fait que vous ne pouvez pas accéder au rapport. Cela n'existe pas ou, dans votre cas, vous n'êtes pas connecté à la machine. L’erreur n’est due à aucun problème d’impression.

J'ai eu un problème obscur semblable à celui-ci, sauf qu'il s'agissait d'un problème d'automatisation (horreur) avec Excel. Je trouvais que l'application fonctionnait correctement lorsque ma session de bureau à distance était connectée, mais une fois déconnectée, des erreurs d'automatisation se produiraient liées à l'imprimante par défaut.

Je pense que le problème est lié à la configuration de l'imprimante par défaut lorsque vous vous connectez au bureau distant. En supposant que vous disposiez d'un fichier .rdp pour démarrer votre session de bureau à distance, si vous le modifiez, sélectionnez le bouton "Ressources locales". onglet, vous pouvez voir si vous partagez ou non votre imprimante locale sur la session distante.

Si elle est activée, cela signifie que lorsque vous vous connectez, votre imprimante par défaut locale devient l'imprimante par défaut sur la machine distante. Lorsque vous vous déconnectez, l'imprimante par défaut de votre application fait toujours référence à l'imprimante par défaut désormais indisponible de votre ordinateur local.

Vous devriez pouvoir résoudre ce problème en veillant à ne pas partager votre imprimante locale, en désélectionnant la case Imprimante dans la liste " Ressources locales " onglet.

Une solution plus simple consisterait à désactiver la "redirection d'imprimante". sur le serveur. Voir https://serverfault.com/questions/5646/how -do-désactiver-les-imprimantes-distantes-utilisant-la stratégie de groupe pour plus d'informations.

Si vous cherchez en détail comment

ajouter des cases à cocher dans les rapports Crystal sur un champ booléen et si le champ booléen est faux

décochez la case sinon cochez la case pour consulter cet article

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

Après une longue recherche sur Google, j'ai trouvé ce lien mais je n'ai pas essayé, car aucun autre serveur gratuit.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top