Applicazione di stampa .Net Crystal Report in esecuzione su errori di connessione del servizio terminal quando la sessione è disconnessa

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

Domanda

Ho creato un'applicazione .Net per l'esecuzione su un App Server che riceve richieste per un report e stampa il report richiesto.

L'applicazione C # utilizza Crystal Reports per caricare il report e successivamente stamparlo.

L'applicazione viene eseguita sul server a cui è connessa tramite una connessione Desktop remoto con un determinato account utente (richiesto per le vecchie app). Quando mi disconnetto dalla sessione remota l'applicazione inizia a sollevare eccezioni come:

Messaggio: CrystalDecisions.Shared.CrystalReportsException: caricamento del report non riuscito

Questo tipo di errore non viene mai generato quando la sessione remota è attiva. Il server che esegue l'app esegue Windows Server 2003, la mia casella che crea la connessione è Windows XP.

Apprezzo che sia abbastanza strano, tuttavia non vedo alcun problema con la distribuzione dell'applicazione che ho creato.

Qualcuno sa quale potrebbe essere la causa di questo problema?

EDIT: ho morso il proiettile e ho creato l'applicazione come servizio Windows, ovviamente non ci vuole molto, non ero convinto che avrebbe risolto il problema. Comunque no !!!

Ho anche provato a rimuovere il codice multi-thread che chiamava la funzione di stampa in modo asincrono. L'ho fatto per semplicemente l'app e restringere il motivo per cui potrebbe non riuscire. Comunque, neanche questo ha migliorato la situazione!

EDIT: i due errori che ottengo sono:

  

System.Runtime.InteropServices.COMException   (0x80000201): stampante non valida   specificato. a   CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName (String   newVal) a   CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName (String   valore) a   Dsa.PrintServer.Service.Service.PrintCrystalReport (Relazione   relazione)

La stampante non è valida, ciò viene confermato quando dopo 60 secondi il tempo scorre e il rapporto viene stampato correttamente.

E

  

Impossibile inviare la richiesta   elaborazione in background. a   CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber (RequestContext   pRequestContext) a   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext   reqContext) --- Fine di inner   traccia stack eccezione --- at   CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException (Eccezione   mangiare   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext   reqContext) a   CrystalDecisions.CrystalReports.Engine.FormatEngine.PrintToPrinter (Int32   nCopie, booleani fascicolati, Int32   startPageN, Int32 endPageN) a   CrystalDecisions.CrystalReports.Engine.ReportDocument.PrintToPrinter (Int32   nCopie, booleani fascicolati, Int32   startPageN, Int32 endPageN) a   Dsa.PrintServer.Service.Service.PrintCrystalReport (Relazione   relazione)

EDIT:

Ho eseguito filemon per verificare se c'erano problemi di accesso. Nel momento in cui si verifica l'errore, il file viene segnalato mon

Richiesta: OPEN | Percorso: C: \ windows \ assembly \ gac_msil \ system \ 2.0.0.0__b77a5c561934e089 \ ws2_32.dll | Risultato: NON TROVATO | Altro: errore attributi

È stato utile?

Soluzione

Il nostro problema particolare è stato risolto. Fondamentalmente quando i report sono stati creati, sono stati salvati con informazioni sulle stampanti. Fondamentalmente una determinata stampante era stata impostata per il rapporto e salvata.

Questa stampante non esiste più, motivo per cui il report ha iniziato a fallire. Fondamentalmente abbiamo dovuto aprire il progettista di report e rimuovere qualsiasi associazione con le stampanti nel report.

Altri suggerimenti

Abbiamo riscontrato questi errori più volte negli ultimi anni. Molte volte ho desiderato un messaggio di errore più specifico.

Innanzitutto, verificherei che non siano installate più versioni di Crystal Reports. Nella nostra esperienza, abbiamo scoperto che Crystal Reports 9.0 non sembra funzionare bene con 10. La disinstallazione della versione 9 sembrava aiutare alcuni dei nostri clienti. Se entrambi sono installati, consiglio vivamente di disinstallare entrambi , quindi reinstallare Crystal Reports 10.

Uno dei nostri primi errori di Crystal Reports è stato il temuto " La richiesta non poteva essere inviata per l'elaborazione in background. " I rapporti funzionerebbero bene per un po ', poi improvvisamente si fermerebbero. Dopo aver esaminato il codice, ho trovato un posto in cui non disponevamo di un ReportDocument. La corretta eliminazione di questo documento ha risolto il problema.

Ultimamente, abbiamo toccato un intervallo di " La richiesta non può essere inviata per l'elaborazione in background. " e " Stampante non valida " errori. Il server di un cliente aveva diverse stampanti di rete definite dall'indirizzo IP. La stampa funzionerebbe bene per un po ', poi all'improvviso, bam , il cliente ha ottenuto la "stampante non valida" errore e chiamato il nostro supporto.

Un altro sviluppatore ha corretto " Stampante non valida " problema facendo tutte le seguenti cose:

  1. Modifica e salva il file .rpt in Visual Studio 2005. Stavamo mantenendo il formato del report compatibile con Crystal Reports 9, perché volevamo che le nostre modifiche fossero distribuibili ai nostri clienti usando ancora versioni precedenti.
  2. Salva i file di Crystal Reports con " Nessuna stampante " opzione. Dal menu Visual Studio 2005, selezionare Crystal Reports / Progettazione / Impostazione stampante, quindi selezionare " Nessuna stampante " casella di controllo.
  3. Abbiamo modificato una formula che mostrava la pagina N di M " da qualcosa di strano come questo:

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

a questo:

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

Sfortunatamente, non ho idea di quali (alcune o tutte) delle azioni sopra riportate possano correggere l'errore. Dico "posso", perché per quanto ne so, l'errore è magicamente scomparso a causa di alcune modifiche alla rete IT.

Infine, hai letto questo white paper? Anche se non ha necessariamente risolto i nostri problemi, è stato molto interessante.

Se si crea un wrapper del servizio finestre per l'applicazione, significa che continuerà a funzionare indipendentemente dagli utenti che hanno effettuato l'accesso. Può anche essere impostato per l'avvio automatico. Penso che, poiché stai utilizzando un'applicazione reale e non un servizio Windows, in realtà non sia in esecuzione una volta che ti disconnetti da una sessione sul server.

Ecco un esempio su Code Project:

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

Sei sicuro di "disconnettere" la sessione remota invece di "disconnettersi". Scollego sempre le mie sessioni a un server NT 2003 e tutto continua a funzionare bene. La disconnessione invece ucciderà le app in esecuzione in quella sessione.

Qual è il tuo server in esecuzione?

Per risolvere il problema che hai descritto devi concentrarti su quale sia il tuo problema.

Ho ricevuto il Messaggio: CrystalDecisions.Shared.CrystalReportsException: caricamento del report non riuscito più volte ed è dovuto al fatto che non è possibile accedere al rapporto. O non esiste o nella tua situazione non sei connesso alla macchina. L'errore non è dovuto a problemi di stampa.

Ho avuto un problema oscuro che era simile a questo, tranne che era un problema di automazione (shock-horror) con Excel. Ho scoperto che l'applicazione funzionava bene quando avevo collegato la mia sessione di desktop remoto, ma una volta disconnesso, avrebbe dato errori di automazione relativi alla stampante predefinita.

Credo che il problema sia legato all'impostazione della stampante predefinita quando ci si collega al desktop remoto. Supponendo di disporre di un file .rdp per l'avvio della sessione del desktop remoto, se lo si modifica, quindi selezionare " Risorse locali " scheda, puoi vedere se condividi o meno la tua stampante locale nella sessione remota.

Se è abilitato, ciò significa che quando ci si connette, la stampante predefinita locale diventa la stampante predefinita sul computer remoto. Quando ti disconnetti, la stampante predefinita dell'applicazione farà comunque probabilmente riferimento alla stampante predefinita non disponibile dal tuo computer locale.

Dovresti essere in grado di risolverlo, assicurandoti di non condividere la tua stampante locale, deselezionando la casella di controllo Stampante da " Risorse locali " scheda.

Una soluzione più semplice sarebbe disabilitare " reindirizzamento della stampante " sul server. Vedi https://serverfault.com/questions/5646/how -do-i-disable-remote-printers-using-group-policy per ulteriori informazioni.

Se stai cercando in dettaglio come

aggiungi caselle di controllo nei report di cristallo su un campo booleano e se il campo booleano è falso

deseleziona altrimenti seleziona la casella di controllo guarda questo articolo

http: //checkboxcrystalreport.blogspot .com / 2009/07 / stampa-casella-in-cristallo-report-for.html

Dopo aver cercato su Google ho trovato questo link ma non ci ho provato, perché nessun altro server gratuito.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top