C # DirectoryEntry Ошибка? - PullRequest
       22

C # DirectoryEntry Ошибка?

1 голос
/ 14 июля 2009

У меня есть проект веб-настройки. В настройках у меня есть поле ввода, где пользователь может вставить строку подключения. Когда я запускаю установку, я получаю эту ошибку:

Ошибка 1001. Неизвестная ошибка (0x8000x5000)

Чтобы отследить, где существует ошибка, я создаю файл и в каждом методе пишу что-то в этот файл. Теперь я думаю, что эта строка вызывает ошибку:

string friendlySiteName = entry.Properties["ServerComment"].Value.ToString();

Но я не знаю, как исправить эту проблему. Я надеюсь, что вы можете помочь мне!

Код:

    public override void Install(System.Collections.IDictionary stateSaver)
    {
        base.Install(stateSaver);

        // Retrieve configuration settings
        string targetSite = Context.Parameters["targetsite"];
        string targetVDir = Context.Parameters["targetvdir"];
        string targetDirectory = Context.Parameters["targetdir"];
        string targetConnectionString = Context.Parameters["targetconn"];

        FileStream f = new FileStream("c:\\myfile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
        StreamWriter w = new StreamWriter(f);
        w.WriteLine("targetSite: " + targetSite);
        w.WriteLine("targetVDir: " + targetVDir);
        w.WriteLine("targetDirectory: " + targetDirectory);
        w.WriteLine("targetConnectionString: " + targetConnectionString);
        w.Close();
        w.Dispose();
        f.Close();
        f.Dispose();

        ConfigureWebConfig(targetSite, targetVDir, targetConnectionString);
    }

    void ConfigureWebConfig(string targetSite, string targetVDir, string targetConn)
    {
        try
        {
            // Retrieve "Friendly Site Name" from IIS for TargetSite
            DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + targetSite);

            FileStream f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            StreamWriter w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig stap 1 ");
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();

            string friendlySiteName = entry.Properties["ServerComment"].Value.ToString();

            f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig friendlySiteName: " + friendlySiteName);
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();

            // Open Application's Web.Config 
            Configuration config = WebConfigurationManager.OpenWebConfiguration("/" + targetVDir, friendlySiteName);
            addConnectionStringAttribute(targetConn, config);

            f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig stap 2 ");
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();
            // togleCompilationAttribute(config);

            // Persist web.config settings 
            config.Save();

            f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig stap 3 ");
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();
        }
        catch (Exception)
        {
            throw;
        }

    }

    private static void addConnectionStringAttribute(string connectionStringValue, Configuration config)
    {
        ConnectionStringSettings appDatabase = new ConnectionStringSettings();

        appDatabase.Name = "dataConnectionString"; 
        appDatabase.ConnectionString = connectionStringValue;
        appDatabase.ProviderName = "System.Data.SqlClient";

        FileStream f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
        StreamWriter w = new StreamWriter(f);
        w.WriteLine("In addConnectionStringAttribute stap 1 ");
        w.Close();
        w.Dispose();
        f.Close();
        f.Dispose();

        config.ConnectionStrings.ConnectionStrings.Clear();
        config.ConnectionStrings.ConnectionStrings.Add(appDatabase);

        f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
        w = new StreamWriter(f);
        w.WriteLine("In addConnectionStringAttribute stap 2 ");
        w.Close();
        w.Dispose();
        f.Close();
        f.Dispose();
    }

Ответы [ 2 ]

0 голосов
/ 10 августа 2009
if (m_targetSite.StartsWith("/LM/"))
    m_targetSite = m_targetSite.Substring(4);

используйте указанный выше код: -

// Retrieve "Friendly Site Name" from IIS for TargetSite  
DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + m_targetSite);
m_siteName = entry.Properties["ServerComment"].Value.ToString();
0 голосов
/ 14 июля 2009

Может быть это или это поможет вам.

Если это не одна из этих причин, то атрибут, вероятно, не существует.

Edit:

Согласно это , если вы используете Win2k8, вам нужно включить «Совместимость метабазы ​​IIS6 и конфигурации IIS», если вы получаете эту ошибку. Он не устанавливается автоматически при включении роли веб-сервера.

Здесь является связанным вопросом.

...