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

ASP.NET Discussion :

ecrire dans word depuis une appli asp sur un serveur avec iis


Sujet :

ASP.NET

  1. #1
    zzozo32456
    Invité(e)
    Par défaut ecrire dans word depuis une appli asp sur un serveur avec iis
    Bonjour tout le monde,
    j'ai une petite erreur qui me pose problème j'ai pas mal cherché mais pour le moment rien trouvé qui fonctionne, un peu d'aide serait la bienvenue.
    J'ai une appli web en asp.net et vb ou j'ecris quelques lignes dans un doc word au moment d'un click sur un bouton. l'appli marche en local sur mon poste mais sur le server j'ai un gros plantage.
    Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 Accès refusé. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.UnauthorizedAccessException: Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 Accès refusé. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

    ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. If the application is impersonating via <identity impersonate="true"/>, the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user.

    To grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:


    [UnauthorizedAccessException: Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 Accès refusé. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).]
    formFicheAccueil.LanceWord(String VarModele) +50
    formFicheAccueil.BGenererFiche_Click(Object sender, EventArgs e) +483
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +154
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691




    --------------------------------------------------------------------------------
    Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1
    On dirait bien que c'est un probleme de droit qui empeche l'appli d'acceder à word. Il doit surement y'avoir une manip a faire du cote du serveur pour lui autoriser l'acces.
    Petite precision l'appli est securise par le mode d'authentification windows et on se connecte avec un compte utilisateur inscrit sur le serveur avec normalemnt des droits suffisant pour acceder au doc word.
    Any ideas???
    Dernière modification par Deepin ; 16/03/2011 à 10h07. Motif: Balises [QUOTE]...[/QUOTE] au lieu de [CODE]...[/CODE]

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    A moins de mettre en place de l'impersonation, ca restera le compte IIS qui essaiera d'écrire le fichier word et pas le compte de l'utilisateur connecté.
    C'est donc au compte IIS d'avoir les droits.

  3. #3
    zzozo32456
    Invité(e)
    Par défaut
    j'ai un peu de mal a saisir le concept de l'impersonation, mais admettons comment je pourrais m'y prendre pour lui donner ces fameux droits?
    merci d'avance^^

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par raphdu38 Voir le message
    j'ai un peu de mal a saisir le concept de l'impersonation, mais admettons comment je pourrais m'y prendre pour lui donner ces fameux droits?
    merci d'avance^^
    C'est assez bien documenté dans MSDN au niveau du développement sauf qu'à mettre en place c'est assez complexe à regler au niveau de l'Active Directory du domaine.

  5. #5
    zzozo32456
    Invité(e)
    Par défaut
    je pensais pouvoir m'en sortir en cherchant un peu avec les pistes que tu m'a donné Nathanael mais après une semaine de recherches infructueuse je crois qu'un peu plus d'aide serait la bienvenue.
    Alors ou j'en suis, pour le moment pas bien plus loin. J'ai mis dans mon web config: <identity impersonate="true> plus authentification mode:windows
    j'ai modifié une ligne du fichier machine.config pour y mettre cette ligne qui n'a absolument rien changé :<processModel userName="SYSTEM" password="AutoGenerate" />
    J'ai une nouvelle page d'exception un peu moins précise mais qui ressemble beaucoup a la precedente:
    Impossible d'activer l'application
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Runtime.InteropServices.COMException: Impossible d'activer l'application

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:


    [COMException (0x800a11f9): Impossible d'activer l'application]
    Microsoft.Office.Interop.Word.ApplicationClass.Activate() +0
    formFicheAccueil.Button1_Click(Object sender, EventArgs e) +90
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +154
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691

    quand je regarde le gestionnaire d'evenements du server j'ai ceci:
    Event code: 3005
    Event message: An unhandled exception has occurred.
    Event time: 22/03/2011 08:41:26
    Event time (UTC): 22/03/2011 07:41:26
    Event ID: e3e5a6250333483db61b84f868535d3f
    Event sequence: 10
    Event occurrence: 1
    Event detail code: 0

    Application information:
    Application domain: /LM/W3SVC/1/ROOT/*****-1-*******
    Trust level: Full
    Application Virtual Path: /*****
    Application Path: D:\Sites IIS\*****\
    Machine name: SRV-*****

    Process information:
    Process ID: 5308
    Process name: w3wp.exe
    Account name: IIS APPPOOL\ASP.NET v4.0 Classic

    Exception information:
    Exception type: COMException
    Exception message: Impossible d'activer l'application
    at Microsoft.Office.Interop.Word.ApplicationClass.Activate()
    at formFicheAccueil.Button1_Click(Object sender, EventArgs e)
    at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



    Request information:
    Request URL: http://localhost/*****/formFicheAccueil.aspx
    Request path: /*****/formFicheAccueil.aspx
    User host address: ::1
    User: SRV-*****\Administrateur
    Is authenticated: True
    Authentication Type: Basic
    Thread account name: IIS APPPOOL\ASP.NET v4.0 Classic

    Thread information:
    Thread ID: 6
    Thread account name: IIS APPPOOL\ASP.NET v4.0 Classic
    Is impersonating: False
    Stack trace: at Microsoft.Office.Interop.Word.ApplicationClass.Activate()
    at formFicheAccueil.Button1_Click(Object sender, EventArgs e)
    at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


    Custom event details:
    il semblerait que l'apli essaie toujours d'ouvrir word avec le compte de base du pool d'application....
    Je ne sais plus ou chercher...
    Dernière modification par Deepin ; 22/03/2011 à 10h45.

  6. #6
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut
    Peux t'on voir un peu de code ?

  7. #7
    zzozo32456
    Invité(e)
    Par défaut
    oui il y'a un peu de nouveau d'ailleurs. pour le moment je fais un test tout simple pour lancer word. Avec le bout de code ci-dessous en fait on dirait que word se lance bien, je vois apparaitre dans le gestionnaire des taches au niveau des processus lancé winword.exe avec comme nom d'utilisateur celui qui s'est connecter à l'appli avec l'authentification windows.
    Parcontre ca plante si je decommente la ligne objetword.activate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            'essai impersonation
            Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
            Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
     
            currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
            impersonationContext = currentWindowsIdentity.Impersonate()
     
            'Insérez ici le code qui s'exécute dans le contexte de sécurité de l'utilisateur d'authentification.       
            'Création de l'instance
            ObjetWord = New Word.Application
     
     
            'Affichage et activation de Word
            ObjetWord.Visible = True
            'ObjetWord.Activate()
     
            ''Libération de la mémoire
            'ObjetWord = Nothing
            impersonationContext.Undo()
    En fait c'est comme ci avec ce bout de code l'application lancait word sur une autre session utilisateur que celle en cours, c'est très bizarre...

  8. #8
    zzozo32456
    Invité(e)
    Par défaut
    bonsoir a tous^^
    du nouveau sur mon probleme que je n'ai toujours pas résolu...
    finalement le problème étant trop obscur pour moi, j'aimerais passer par le vbsript pour résoudre mon affaire. L'idée: écrire a la volée un fichier vbs avec les données dont j'ai besoin qui sera détruit après exécution. Seulement connaissez vous une méthode pour lancer ce script une fois créer sur la session ouverte du client?
    merci d'avance
    Dernière modification par Deepin ; 04/04/2011 à 10h34. Motif: Suppression de mention de type "up" du message

Discussions similaires

  1. Ecrire dans word depuis Excel: quel logique utiliser ?
    Par c.piette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/04/2015, 16h33
  2. Déployer une appli java sur un serveur
    Par julienAnderson dans le forum Langage
    Réponses: 0
    Dernier message: 27/03/2012, 21h39
  3. Réponses: 0
    Dernier message: 08/07/2009, 16h22
  4. Réponses: 7
    Dernier message: 07/01/2009, 08h53
  5. Réponses: 4
    Dernier message: 08/02/2007, 00h32

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