2010-07-25 78 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服务正在运行?

尝试运行:

net start iisadmin 
+0

你好马修,谢谢你的回复。 服务已在运行。 – 2010-07-25 08:14:53

0

防火墙?检查您是否可以从应用程序之外的同一台服务器访问以进行确认。

相关问题