IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Impression PDF depuis un service Windows


Sujet :

Dotnet

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Points : 486
    Points
    486
    Par défaut Impression PDF depuis un service Windows
    Bonjour,


    Je souhaite pouvoir imprimer des documents PDF depuis un programme C# (framework 4) exécuté en tant que service Windows.

    Pour cela, j'utilise la méthode d'impression suivante (extrait de code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                    LocalPrintServer printServer = new LocalPrintServer();
                    PrintQueue printQueue = printServer.GetPrintQueue( printerName );
     
                    PrintSystemJobInfo job = printQueue.AddJob( fileName );
     
                    job.JobStream.Write( data, 0, data.Length );
                    job.JobStream.Close();
    Ceci plante aléatoirement. Dans la pratique l'impression se déroule bien pendant 1 à plusieurs jours (on imprime environ 500 documents par jour), puis plante et quand le plantage est survenu, le redémarrage du service est nécessaire pour pouvoir imprimer de nouveau.

    J'ai deux types d'exception levées :

    Espace insuffisant pour traiter cette commande à MS.Win32.UnsafeNativeMethods.CreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)
    à MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
    à System.Windows.Threading.Dispatcher..ctor()
    à System.Windows.Threading.Dispatcher.get_CurrentDispatcher()
    à System.Printing.PrintServer.Initialize(String path, String[] propertiesFilter, PrinterDefaults printerDefaults)
    à System.Printing.PrintServer..ctor()
    à System.Printing.LocalPrintServer..ctor()
    à SodisEDI.EDIOrderTerminate.PrintPDFDocument2(String printerName, String documentDirectory, String orderName) dans e:\DEV\KomotoTFS\Ketra\Main\Clients\Sodis\SodisEDI\SodisEDI\EDIOrderTerminate.cs:ligne 284


    et
    L’opération a réussi à MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
    à MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
    à System.Windows.Threading.Dispatcher..ctor()
    à System.Windows.Threading.Dispatcher.get_CurrentDispatcher()
    à System.Printing.PrintServer.Initialize(String path, String[] propertiesFilter, PrinterDefaults printerDefaults)
    à System.Printing.PrintServer..ctor()
    à System.Printing.LocalPrintServer..ctor()
    à SodisEDI.EDIOrderTerminate.PrintPDFDocument2(String printerName, String documentDirectory, String orderName) dans e:\DEV\KomotoTFS\Ketra\Main\Clients\Sodis\SodisEDI\SodisEDI\EDIOrderTerminate.cs:ligne 284


    Microsoft indique bien qu'utiliser System.Printing n'est pas fiable dans le contexte d'un service windows (ceci est documenté dans la version 4.5 du framework).


    Pour contourner le problème, j'ai tenté de lancer un petit exé charger de réaliser l'impression, cet exé étant lancé depuis le service, mais même plantage, après un certain temps.


    Quel contournement est-il possible d'utiliser ?

  2. #2
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Pourquoi ne pas utiliser un Web Service pour lancer l'impression via le Windows Service ?

Discussions similaires

  1. Extinction des écrans depuis un service windows
    Par jesus144 dans le forum Services Windows
    Réponses: 10
    Dernier message: 13/08/2010, 16h22
  2. Réponses: 11
    Dernier message: 07/05/2010, 14h11
  3. Réponses: 3
    Dernier message: 21/11/2006, 22h05
  4. [FOP] Impression pdf depuis fichier fo
    Par teophil dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 05/05/2006, 12h16
  5. [C#] Execution d'un fichier VBS depuis un service Windows
    Par 0r3L dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/11/2005, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo