2010-07-25 156 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

防火牆?檢查您是否可以從應用程序之外的同一臺服務器訪問以進行確認。

相關問題