7

私はWCFと統合されたエンタープライズライブラリ検証ブロックを使用しています。System.Runtime.InteropServices.COMException (0x8000FFFF): Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))WIN32 API LogonUser と WindowsIdentity.Impersonate を使用して他のユーザーになりすますと報告されます。構成の読み込み時にセキュリティ証拠を取得するタイミングに問題があるようです。なりすましのコーディングを削除すると、エラーなしで動作します。これらは例外スタック トレースの一部です。ヘルパーを提供していただければ幸いです。ありがとう。

System.Runtime.InteropServices.COMException (0x8000FFFF): Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone& zone, StringHandleOnStack retUrl)
   at System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence()
   at System.Security.Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType)
   at System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType)
   at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate)
   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)
   at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed)
   at System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType)
   at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate)
   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)
   at System.Security.Policy.Evidence.RawEvidenceEnumerator.MoveNext()
   at System.Security.Policy.Evidence.EvidenceEnumerator.MoveNext()
   at System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName)
   at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath)
   at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigurationHost.CreateConfigurationContext(String configPath, String locationSubPath)
   at System.Configuration.Internal.DelegatingConfigHost.CreateConfigurationContext(String configPath, String locationSubPath)
   at System.Configuration.BaseConfigurationRecord.get_ConfigContext()
4

4 に答える 4

2

長い戦いと多くの ProcMon のキャプチャの後、いくつかの条件下で、相互運用中および偽装中にセキュリティ ゾーンをチェックするときにエラーが発生することを発見しました。これは、次の KB に関連しています。

https://support.microsoft.com/en-us/kb/945701?wa=wsignin1.0

レジストリ ノードとキーが追加されている末尾を確認する場合は、指示に従って w3wp.exe を追加するのではなく、独自の実行可能ファイルのファイル名を追加します。これは私にとってはうまくいきました-YMMV。

于 2015-04-30T14:19:56.277 に答える
0

将来の読者に役立つことを願って、このコードを共有しています。3時間の頭痛から抜け出すのに文字通り助けになりました:)

        //This is an important line to write while impersonating.
        //It will allow SQL server connections to happen otherwise connection strings will error out.
        ConfigurationManager.GetSection("SqlColumnEncryptionEnclaveProviders");

        //Do the impersonation
        var credentials = new UserCredentials(DomainName, AccountName, Password);
        Impersonation.RunAsUser(credentials, LogonType.Interactive, () =>
        {
            //Your code here inside impersonation . . .
        });
于 2020-01-16T17:17:17.413 に答える
-1

MS フォーラムのこのスレッドで、これに対する私の回答を参照してください。

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/b5b7a179-3737-4380-b6cf-843f3e71b317/

これはスレッドのタイトルです: 接続プールがランダムに COM 例外をスローします。

ページ上のテキストで LogonUser を検索できます。

于 2013-05-27T16:23:45.207 に答える