15

開発中の Web サービスに PrincipalContext を使用しようとしています。別のアプリケーションの Web サーバーで既にフォーム認証を使用しており、正常に動作しています。

私が受け取っているエラーは次のとおりです。

System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.
   at System.DirectoryServices.Protocols.LdapConnection.Connect()
   at System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID)
   at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
   at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request)
   at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
   --- End of inner exception stack trace ---
   at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
   at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password)
   at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, String userName, String password)
   at webService.Service1.ValidUser(String sUserName) in E:\Development\CSharpApps\Desktop\OrgChart\webService\Service1.asmx.cs:line 158

私たちのウェブサーバーは DMZ にあり、ファイアウォールを介してドメインにアクセスします。例として、以下のようにポート情報などを使用しています。

これは、開発ボックスの IP を使用して機能しますが、ファイアウォールの内側にあります。私が送信している IP 情報は、Web フォーム認証内で使用しているものと同じです。

 PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "192.168.1.1:389", "dc=doodlie,dc=com",@"doodlie\admin","doodliesquat");
4

3 に答える 3

0

問題に関係なく、AD 管理者/トラブルシューティング用のこれらの非常に貴重なツールのいくつかをインストールすることは、私にとって天からの贈り物でした。

可能であれば、リモート サーバー管理ツール (RSAT) をコンピューターまたは Web サーバー (許可されている場合) にインストールし、Active Directory ユーザーとコンピューター クライアントを使用して、DC の正確な URL/IP を特定します。これらのツールを使用して接続できない場合は、IT サポート/開発運用にエスカレートする出発点になる可能性があります

これに加えて、Web サイト アプリケーションが実行されている AD/サービス アカウントには、DC にアクセスするための十分な権限がない可能性があります。私は成功しました

using (HostingEnvironment.Impersonate())
{
    // code in here. 
}

IIS で Web サイト アプリケーションが実行されているアプリケーション プールは、適切な権限を持つユーザー アカウントで実行する必要があります。(ネットワークサービスである必要はありません)

于 2014-04-28T22:56:08.547 に答える
0

私の場合、URLからポート番号を削除するとうまくいきました

于 2015-06-22T09:50:03.883 に答える