2009-09-20 7 views
0

Je souhaite recycler le pool d'applications IIS 6 dans une application Web à l'aide de asp.net C#. "AppPool_02" est un autre nom de pool d'applications, et le code ci-dessus s'exécute sur "appPool_01".C# Recycle l'erreur du pool d'applications IIS 6

Quand je le code ci-dessus, il est survenue une erreur:.

拒绝 访问 (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)) Description: Une exception non gérée est survenue pendant l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.UnauthorizedAccessException. 拒绝 访问 (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED))

ASP.NET est pas autorisé à accéder à la ressource demandée. Envisagez d'accorder des droits d'accès à la ressource à l'identité de demande ASP.NET. ASP.NET a une identité de processus de base (généralement {MACHINE} \ ASPNET sur IIS 5 ou Service réseau sur IIS 6) qui est utilisée si l'application n'emprunte pas d'identité. Si l'application emprunte l'identité via, l'identité sera l'utilisateur anonyme (généralement IUSR_MACHINENAME) ou l'utilisateur de requête authentifié.

Pour accorder l'accès ASP.NET à un fichier, cliquez avec le bouton droit sur le fichier dans l'Explorateur, choisissez "Propriétés" et sélectionnez l'onglet Sécurité. Cliquez sur "Ajouter" pour ajouter l'utilisateur ou le groupe approprié. Mettez en surbrillance le compte ASP.NET et cochez les cases correspondant à l'accès souhaité.

Erreur Source:

Line 72:   string path = "IIS://" + machine + "/W3SVC/AppPools/" + appPoolName; 
Line 73:   DirectoryEntry w3svc = new DirectoryEntry(path); 
Line 74:   w3svc.Invoke("Recycle", null); 
Line 75:  } 
Line 76: 

Fichier source: e: \ iProject \ iProgress \ iProgress \ T \ T.aspx.cs Ligne: 74

Stack Trace:

[UnauthorizedAccessException: Ex 访问. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED))]

[TargetInvocationException: une exception a été levée par la cible d'un appel.] System.DirectoryServices.DirectoryEntry.Invoke (String nomMéthode, Object [] args) +238 WE_T.Recycle (Chaîne machine, Chaîne appPoolName) dans e: \ iProject \ iProgress \ iProgress \ T \ T.aspx.cs: 74 WE_T.Page_Load (Expéditeur d'objet, EventArgs e) dans e: \ iProject \ iProgress \ iProgress \ T \ T.aspx.cs: 38 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Objet o, Objet t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Expéditeur d'objet, EventArgs e) +35 System.Web.UI.Control.OnLoad (EventArgs e) +99 System.Web.UI.Control.LoadRecursive () +50 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

+2

Quelle est la trace d'exception complète? –

+0

"Le serveur RPC n'est pas disponible" ressemble à ... l'hôte IIS est introuvable. –

Répondre

1

Je l'ai eu en travaillant en définissant l'AppPool comme fonctionnant comme "Système local". Mais cela peut causer un problème de sécurité.Y a-t-il une meilleure solution?

Text to Speech in ASP.NET - Access is denied... what to do?

+0

La meilleure solution est de ne jamais recycler un pool d'applications de cette manière. Pourquoi avez-vous besoin de faire cela à partir d'une application ASP.NET? Que faire si d'autres applications sont déployées dans le même pool? Votre demande de recyclage peut tous les casser. –

+1

@ Mike108: voir ceci pour une solution meilleure et plus simple: http://daron.yondem.com/PermaLink.aspx?guid=d82b6b05-8c59-4136-becd-329156083b75 –

1

Votre message initial avait un espace après "localhost" dans le nom de la machine. Que se passe-t-il si vous supprimez ceci?

De même, vous devrez vous assurer que le processus utilisateur ASP.NET dans lequel ce code s'exécute dispose des privilèges appropriés pour redémarrer les autres pools d'applications. Vous pouvez soit utiliser l'emprunt d'identité pour faire ceci (mauvais) ou suivre les instructions dans l'exception pour permettre à l'utilisateur de traiter les droits appropriés à l'autre application. bassin.

+0

Oh, oui. Je supprime l'espace après "localhost", puis l'erreur passe à "Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)" – Mike108

+0

L'erreur "serveur RPC non disponible" n'est pas la vraie erreur, c'est juste parce qu'il y a un espace après " localhost "dans mon message initial. Après avoir supprimé l'espace, la véritable erreur est exception de HRESULT: 0x80070005 (E_ACCESSDENIED). – Mike108

0

Exception jeter parce que l'utilisateur qui exécuter l'application n'a aucun droit d'administrateur

Exception from HRESULT: 0x80070005 (E_ACCESSDENIED) 

Si vous voulez faire cela, vous devez donner Privileg d'administrateur pour l'utilisateur ou créer une application séparée qui surveiller l'état de votre application et recycler si nécessaire.

Questions connexes