ASP.NET C # - «RPC-сервер недоступен» - PullRequest
1 голос
/ 25 июля 2010

Это мой код для создания виртуального каталога в IIS:

/// <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 Server2008 R2,

IIS 7.5

ASP.NET 4.0

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 25 июля 2010

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

0 голосов
/ 25 июля 2010

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

0 голосов
/ 25 июля 2010

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

Попробуйте запустить:

net start iisadmin
...