2010-07-25 4 views
1

Ceci est mon code pour la création d'un répertoire virtuel dans IIS:ASP.NET C# - « Le serveur RPC est indisponible »

/// <summary> 
/// Creates the virtual directory. 
/// </summary> 
/// <param name="webSite">The web site.</param> 
/// <param name="appName">Name of the app.</param> 
/// <param name="path">The path.</param> 
/// <returns></returns> 
/// <exception cref="Exception"><c>Exception</c>.</exception> 
public static bool CreateVirtualDirectory(string webSite, string appName, string path) 
{ 
    var schema = new DirectoryEntry("IIS://" + webSite + "/Schema/AppIsolated"); 
    bool canCreate = !(schema.Properties["Syntax"].Value.ToString().ToUpper() == "BOOLEAN"); 
    schema.Dispose(); 

    if (canCreate) 
    { 
     bool pathCreated = false; 
     try 
     { 
      var admin = new DirectoryEntry("IIS://" + webSite + "/W3SVC/1/Root"); 

      //make sure folder exists 
      if (!Directory.Exists(path)) 
      { 
       Directory.CreateDirectory(path); 
       pathCreated = true; 
      } 

      //If the virtual directory already exists then delete it 
      IEnumerable<DirectoryEntry> matchingEntries = admin.Children.Cast<DirectoryEntry>().Where(v => v.Name == appName); 
      foreach (DirectoryEntry vd in matchingEntries) 
      { 
       admin.Invoke("Delete", new[] { vd.SchemaClassName, appName }); 
       admin.CommitChanges(); 
       break; 
      } 

      //Create and setup new virtual directory 
      DirectoryEntry vdir = admin.Children.Add(appName, "IIsWebVirtualDir"); 

      vdir.Properties["Path"][0] = path; 
      vdir.Properties["AppFriendlyName"][0] = appName; 
      vdir.Properties["EnableDirBrowsing"][0] = false; 
      vdir.Properties["AccessRead"][0] = true; 
      vdir.Properties["AccessExecute"][0] = true; 
      vdir.Properties["AccessWrite"][0] = false; 
      vdir.Properties["AccessScript"][0] = true; 
      vdir.Properties["AuthNTLM"][0] = true; 
      vdir.Properties["EnableDefaultDoc"][0] = true; 
      vdir.Properties["DefaultDoc"][0] = 
       "default.aspx,default.asp,default.htm"; 
      vdir.Properties["AspEnableParentPaths"][0] = true; 
      vdir.CommitChanges(); 

      //the following are acceptable params 
      //INPROC = 0, OUTPROC = 1, POOLED = 2 
      vdir.Invoke("AppCreate", 1); 

      return true; 
     } 
     catch (Exception) 
     { 
      if (pathCreated) 
       Directory.Delete(path); 
      throw; 
     } 
    } 
    return false; 
} 

Ce code a été pris d'un autre utilisateur qui l'a suggéré, et il fonctionne très bien pour lui et d'autres utilisateurs.

L'erreur que je reçois quand je déclenche la fonction:

The RPC server is unavailable.

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: The RPC server is unavailable.

J'utilise Windows Server 2008 R2,

IIS 7.5

ASP.NET 4.0

Merci d'avance!

Répondre

0

De quel utilisateur utilisez-vous ce code? Vous devez être un administrateur pour pouvoir écrire dans la métabase. Si, par exemple, vous l'exécutez depuis IIS à l'aide de l'utilisateur anonyme, vous ne pourrez pas écrire dans la métabase.

0

Avez-vous vérifié pour vous assurer que le service IISAdmin est en cours d'exécution?

Essayez de lancer:

net start iisadmin 
+0

Bonjour Matthew et merci pour la réponse. Le service est déjà en cours d'exécution. –

0

Firewall? Vérifiez que vous pouvez accéder, à partir du même serveur, en dehors de l'application, pour confirmer.

Questions connexes