none
Comportement ASP.Net/VB.Net et Word sur Serveur IIS7 RRS feed

  • Discussion générale

  • Bonjour,

    J'ai développé une application web (plutôt projet site web) qui permet de créer des rapports en format Word. Lorsque je la test en local via VS2010, je n'ai aucun problème mais une fois sur le serveur, lorsque je veux créer un fichier Word via mon fichier modèle (dotx), cela ne marche plus. Voici le message en retour lors de la tentative de création d'un objet Word:

    Word n'a pas pu lire ce document. Il est peut-être corrompu.
    Essayez l'une ou plusieurs des opérations suivantes :
    * Ouvrez et réparez le fichier.
    * Ouvrez le fichier avec le convertisseur Récupération de texte

    Mon code, un peu long, je fournit le constructeur (j'ai tout englobé dans une classe):

    Imports IWord = Microsoft.Office.Interop.Word
    Imports System.Runtime.InteropServices.Marshal

                Protected _word As IWord.Application
                Protected _doc As IWord.Document

                 Sub New(ByVal wordModel As String, Optional ByVal showWordInstance As Boolean = True)
                    Try
                        _word = New IWord.Application
     
                        _word.Visible = showWordInstance
                        _doc = _word.Documents.Add(wordModel)
     
                        _docPath = wordModel
                    Catch ex As Exception
                        If Not IsNothing(_doc) Then
                            _doc.Close(False)
                        End If
                        If Not IsNothing(_word) Then
                            _word.Quit()
                        End If
     
                        Throw ex
                    End Try
                End Sub

    Ma méthode Dispose:

                Protected Overridable Sub Dispose(disposing As Boolean)
                    If Not Me.disposedValue Then
                        If disposing Then
                        End If
     
                        ReleaseComObject(_doc)
                        ReleaseComObject(_word)
     
                        GC.Collect()
                        GC.WaitForPendingFinalizers()
                    End If
                    Me.disposedValue = True
                End Sub

    Autre chose que j'ai également remarqué, une fois que je lance le programme sur le serveur, il ne me quitte pas WINWORD.EXE et si dans le Catch de l'exception du constructeur j'utilise ReleaseComObject, le programme ne rend pas la main. J'utilise l'emprunt d'identité (pas le choix) dans le fichier Web.config et du coup, j'ai rajouté dans la partie Sécurité du fichier modèle et de WINWORD.EXE ASP NET_2006 mais ça ne donne rien.

    Est-ce que quelqu'un pourrait me donner la bonne marche à suivre s'il vous plaît ?

    Vraiment un gros merci par avance ! :)

    mercredi 27 avril 2016 06:56

Toutes les réponses

  • Bonjour, Franck Hecht,

    Je vous invite à consulter le lien suivant:
    Com Exception: Word was unable to read this document. It may be corrupt

    Est-ce que la cible est Word 2010 ou 2007 ? Pouvez-vous accéder au fichier modèle depuis le serveur ?

    Cordialement,
    Dimitar

    jeudi 28 avril 2016 06:53
    Modérateur
  • Bonjour,

    Merci pour le lien, je vais aller y jeter un oeil... C'est Office 2013 et je peux l'ouvrir depuis le serveur manuellement, il m'ouvre Word sans problème.

    jeudi 28 avril 2016 11:55
  • Bonjour, Franck Hecht,

    Je vous invite à consulter le lien suivant:
    Com Exception: Word was unable to read this document. It may be corrupt

    Est-ce que la cible est Word 2010 ou 2007 ? Pouvez-vous accéder au fichier modèle depuis le serveur ?

    Cordialement,
    Dimitar

    Bonjour,

    Je reviens à la charge après une pause sur ce projet... Donc, le fichier n'est plus considéré comme corrompu mais, il reste le fait que le fichier n'est pas enregistré et le processus n'est pas kill

    mercredi 12 octobre 2016 09:52
  • Bonjour,

    J'ai donc trouvé l'erreur par rapport à mon message précédent:

    Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80080005 Échec de l’exécution du serveur (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). 

    Le CLSID correspond à

    Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C 

    Mais je ne sais pas trop quoi faire...

    Merci d'avance pour votre aide.


    [Edit]
    J'ai ajouté les Services de composants pour le mode 32bits par le biais de

    MMC -32

    Mais cela ne change rien...

    [Edit 2]

    Ce qui me semble bizarre, c'est que sur le serveur, une instance de WINWORD.EXE est tout de même créé, ça veut dire qu'il accède quand même à l'objet COM, je ne comprend pas trop l'erreur du coup...


    jeudi 13 octobre 2016 08:52