3

最近、ASP.NET アプリケーションを IIS5 を実行している古いサーバーから IIS7.5 を実行している新しいサーバーに移動しました。

アプリケーションで次のエラーが表示されます。

(&(objectCategory=person)(sAMAccountName=)) 検索フィルターが無効です。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.ArgumentException: (&(objectCategory=person)(sAMAccountName=)) 検索フィルターが無効です。

AD を検索する関数は次のとおりです。

public static string Get_AD_User_Email(string username)
{
        try
        {
            DirectorySearcher searcher = new DirectorySearcher("(&(objectCategory=person)(sAMAccountName=" + username + "))");
            SearchResult result = searcher.FindOne();

            if (result != null)
            {
                DirectoryEntry employee = result.GetDirectoryEntry();

                if (employee.Properties["mail"] != null)
                {
                    return employee.Properties["mail"].Value.ToString();
                }
                else return "NULL";
            }
            else throw new Exception("ERROR: Problem searching active directory for users.");
        }
        catch (Exception ex) { throw ex; }
    }

奇妙なことは、Visual Studio でのデバッグ時に Web サイトが実行され、IIS からのみクラッシュすることです。

誰かが私を助けることができますか?

4

4 に答える 4

2

問題は、関数 Get_AD_User_Email(string username)が の空の値で呼び出されることですusername

于 2013-04-05T13:56:24.737 に答える
1

IISサーバーを変更しましたが、呼び出し元のメソッドからユーザー名が渡されなくなりました(他のいくつかの回答が指摘しているように)。

IIS のその Web サイトで匿名アクセスが無効になっていることを確認します。Windows 認証と匿名アクセスの両方が有効になっていることがよくあります。この場合、匿名が優先され、ユーザー名は取得されません。

HttpContext.Current.User の値を確認してください。私は通常、以下のようなコードを使用して Windows 認証を検証します。

WindowsIdentity id = (WindowsIdentity)HttpContext.Current.User.Identity; 
string username = id.Name;
于 2013-04-05T17:33:44.547 に答える
1

以来:

DirectorySearcher searcher = new DirectorySearcher("(&(objectCategory=person)(sAMAccountName=" + username + "))");

例外を返しています:

(&(objectCategory=person)(sAMAccountName=)) 検索フィルターが無効です。

に空の文字列を渡していますGet_AD_User_Email

「ユーザー名」をどのように取得していますか?

于 2013-04-05T17:18:48.633 に答える