2010-07-25 20 views
1

Это мой код для создания виртуального каталога в IIS:ASP.NET C# - «Сервер RPC недоступен»

/// <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; 
} 

Этот код был взят из какого-то другого пользователя, который предложил его, и он прекрасно работает его и других пользователей.

Я получаю ошибку, когда я вызвать функцию:

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.

Я использую Windows Server 2008 R2,

IIS 7.5

ASP.NET 4.0

Заранее благодарен!

ответ

0

Какой у вас этот код, как? Вы должны быть администратором, чтобы иметь возможность писать в метабазу, так что, например, если вы используете это из IIS с помощью анонимного пользователя, вы не сможете писать в метабазу.

0

Вы проверили, работает ли служба IISAdmin?

Try работает:

net start iisadmin 
+0

Привет, Мэтью, и спасибо за ответ. Служба уже включена. –

0

Firewall? Убедитесь, что вы можете получить доступ, с того же сервера, вне приложения, для подтверждения.

Смежные вопросы