2011-09-07 2 views
4

Je tente de modifier l'identité du pool d'applications sur Windows Azure. Mon projet utilise ce pool d'applications lorsqu'il fonctionne sur Windows Azure. Par défaut, le pool d'applications utilise l'identité NetworkService, mais je dois utiliser une autre identité. J'essaie changer en cas de OnStart() WebRole de cette façon:Erreur lors de la modification de l'identité du pool d'applications

using (ServerManager serverManager = new ServerManager()) 
{      
    string appPoolName = 
    serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"] 
    .Applications.First().ApplicationPoolName; 

    var appPool = serverManager.ApplicationPools[appPoolName]; 

    appPool.ProcessModel.UserName = Environment.MachineName + "\\UserName"; 

    appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser; 

    appPool.ProcessModel.Password = "UserPassword"; 

    serverManager.CommitChanges(); 
} 

Mais je me exception avec le message suivant:

System.Runtime.InteropServices.COMException (0x80090016): 
     Keyset does not exist (Exception from HRESULT: 0x80090016) 
    at Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.CommitChanges() 
    at Microsoft.Web.Administration.Configuration.CommitChanges() 
    at Microsoft.Web.Administration.ConfigurationManager.CommitChanges() 
    at Microsoft.Web.Administration.ServerManager.CommitChanges() 
    at Project.Web.WebRole.OnStart() in E:\Projects\...\Web\WebRole.cs:line 57 

Si je change l'identité dans le gestionnaire IIS je ne suis pas d'erreur. Quel est le problème avec mon code et pourquoi ai-je cette erreur?

+0

branche et lié et la séparation des préoccupations. Pouvez-vous tout d'abord essayer de déboguer et n'appliquer qu'une petite modification et voir si CommitChanges fonctionne ou échoue toujours? commenter votre code pour l'identité et voir si vous parvenez à changer une autre propriété ... –

Répondre

2

Les mises à jour du fichier applicationHost.config nécessitent des privilèges d'administrateur. Lorsque vous exécutez localement, vous êtes un administrateur. Dans le cloud, votre RoleEntryPoint s'exécute en tant qu'utilisateur normal à moins que vous ne l'éleviez. L'avez-vous fait?

Vérifiez si <Runtime executionContext="elevated"/> est spécifié dans votre déclaration de rôle dans ServiceDefinition.csdef.

Modifier: Wade a également montré comment faire cela en utilisant une méthode légèrement différente (vérifiez les commentaires). Try this as well

+0

Merci! J'ai essayé de faire cela http://www.wadewegner.com/2011/01/programmatically-changing-the-apppool-identity-in-a-windows-azure-web-role/ mais j'ai une autre exception –

Questions connexes