2

IIS8 (Windows サーバー 2012) で新しい asp.net サイトをセットアップしています。Windows Server 2008、IIS6 で動作する古いコードを使用しようとしています。どちらも仮想サーバーです。

Windows 認証が有効になっています。

匿名認証が無効になっています。(私が読んだいくつかの投稿ごとに有効にしようとしましたが、変更はありません)

次の方法でユーザーを取得します。

string user = System.Web.HttpContext.Current.User.Identity.Name;

int separatorIndex = user.LastIndexOf(@"\");
if (separatorIndex != -1 && separatorIndex < user.Length - 1)
  {
    user = user.Substring(separatorIndex + 1);
  }

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://na.xxxxxx.biz");

DirectorySearcher directorySearcher = new DirectorySearcher(rootEntry);
directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", user);
directorySearcher.PropertiesToLoad.Add("displayName");

var result = directorySearcher.FindOne();

これは localhost でうまく機能し、サーバーでエラーを返します。

System.DirectoryServices.DirectoryServicesCOMException (0x80072020): 操作エラーが発生しました。System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) で System.DirectoryServices.DirectoryEntry.Bind() で System.DirectoryServices.DirectoryEntry.get_AdsObject() で System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne) で System.DirectoryServices.DirectorySearcher .FindOne() at EngApps.App_Code.UserFullName.LookUpDirectory() in e:\inetpub\wwwroot\App_Code\UserFullName.cs:line 45

45 行目は、'FindOne()' を使用して上でポーズをとった最後の行です。

ユーザー名とパスワードをハードコーディングすると、サーバー上ですべてが機能します。

rootEntry.Username = user;
rootEntry.Password = "xxxxxx";

しかし、古いコード ベースではこれは必要ないので、IIS8 には設定があると思います。匿名認証を少しいじって、いくつかの投稿を読みましたが、まだ理解できていません。

ご協力いただきありがとうございます。

4

1 に答える 1

3

この問題は、アプリケーションが実行されている IIS アプリケーション プールの ID が、LocalService など、ドメインを照会する権限を持たないものである可能性があります。

前のインスタンスのアプリケーション プールを確認し、ID が同じか、少なくとも同様のアクセス機能があることを確認する必要があります。

于 2013-07-02T21:26:05.840 に答える