0

IIS 7.0 で奇妙な問題に直面しています。

IIS に次の仮想ディレクトリがあります。 代替テキスト

IIS の仮想ディレクトリで Windows 認証モードのみが有効になっている

この方法で TestV/Folder/file.aspx に関連付けられた DirectoryEntry を取得しようとすると、次のようになります。

string vDir = @"/TestV/folder/file.aspx";

            DirectoryEntry dir = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/ROOT" + vDir, @"adminusername", @"password");
            dir.AuthenticationType = AuthenticationTypes.Secure;

            try
            {
                Console.WriteLine(dir.Name);
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }

            Console.WriteLine("");

「指定されたパスが見つかりません」という例外が発生します。

IIS に戻って次の手順を実行すると、TestV/Folderを右クリックして匿名認証モードを有効にし、再度無効にします。

TestV/Folder/file.aspxを右クリックし、匿名認証モードを有効にしてから、再度無効にします。

基本的に、aspx ファイル Testv/Folder/file.aspx に手動でアクセスしました。

上記の手順の後、プログラムを再実行すると、コードはディレクトリ エントリに正常にアクセスでき、名前 (file.aspx) を正常に出力できます。

ここで何が問題なのですか?

もう1つの情報:

IIS 6.0 でもこの動作が見られます。したがって、IIS で仮想ディレクトリ内のフォルダ/ファイルに対して手動操作を行わない限り、Active Directory 内に対応するメタデータが作成されないように見えますか?

4

3 に答える 3

1

問題の答えが得られました (同僚の助けを借りて)

解決策は次のとおりです。 1. プログラムは、エントリにアクセスする前に、仮想ディレクトリの下のファイル/フォルダにアクセスする前に、IIS メタデータに (疑似?) エントリを追加する必要があります。

try
            {
                // make pseudo entries:
                DirectoryEntry folder = rootDir.Children.Add("Folder", "IISWebDirectory");
                folder.CommitChanges();
                file = folder.Children.Add("File.aspx", "IISWebFile");
                file.CommitChanges();
            }

それから出来上がり

PS:

DirectoryEntry dir = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/ROOT" + vDir, @"adminusername", @"password");
dir.AuthenticationType = AuthenticationTypes.Secure;
dir.RefreshCache();

Directory.Refresh は役に立たない

于 2009-01-27T06:23:23.077 に答える
0

これは正確な答えではありませんが、System.DirectoryServices は通常、IIS との対話には使用されないことを指摘しておきます。IIS 設定にアクセスできますが、一般的には WMI の方が適しています。

于 2009-01-22T17:04:11.000 に答える
0

3 行目の直後に RefreshCache() を呼び出すと効果がありますか?

DirectoryEntry dir = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/ROOT" + vDir, @"adminusername", @"password");
dir.AuthenticationType = AuthenticationTypes.Secure;
dir.RefreshCache();
于 2009-01-22T16:08:48.413 に答える