System.DirectoryServicesのDirectorySearcherで.FindAll()を呼び出すと、アクセス違反がランダムに発生するC#.Net4の単純なコードスニペットがあります。
このメソッドが行うのは、ユーザーがActive Directoryにロードされているかどうかを確認し、ディレクトリエントリを返すことだけです。
ネットを検索したところ、SharePointのブログやフォーラムで例外に関する複数の言及を見つけることができましたが、通常のC#.net4サービスからは見つかりませんでした。
私の質問は、これと同じアクセス違反が私のサービスで発生するので、問題を解決するために同じ修正プログラムが必要になるのでしょうか?
コード:
deSearch.Filter = String.Format("(&(SAMAccountName={0}))", userName);
using (SearchResultCollection results = deSearch.FindAll())
{
if (results.Count > 0)
{
de = results[0].GetDirectoryEntry();
return de;
}
else
return null;
}
例外:
System.AccessViolationException:保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。System.DirectoryServices.Interop.UnsafeNativeMethods.IntADsOpen.GetObject(String className、String RelativeName)at System.DirectoryServices.DirectoryEntries.Find(String name、String schemaClassName)at System.DirectoryServices.DirectoryEntries.Find(String name)