5

NetworkCredential 클래스를 사용하여 ASP.NET을 통해 웹 페이지에 액세스하려고합니다. 그러나 다음 메시지로 예외가 계속 발생합니다. System.Security.Cryptography.CryptographicException: The handle is invalidASP.NET의 NetworkCredential 오류

다음은이 함수를 호출하는 방법에 대한 코드입니다. 어떤 도움이라도 대단히 감사합니다.

C 번호 :

System.Net.WebClient client = new System.Net.WebClient(); 
client.Credentials = new System.Net.NetworkCredential("Admin", "Nimda"); 

스택 추적

[CryptographicException: The handle is invalid. 
] 

System.Security.SecureString.ProtectMemory() +154 
    System.Security.SecureString.InitializeSecureString(Char* value, Int32 length) +170 
    System.Security.SecureString..ctor(Char* value, Int32 length) +65 
    System.Net.SecureStringHelper.CreateSecureString(String plainString) +6181188 
    System.Net.NetworkCredential..ctor(String userName, String password) +64 
+0

분명히 알 수있는 것은 client.Credentials = 예외를 throw하는 줄 또는 다른 것입니까? –

+0

그것이 예외를 throw하는 행입니다 (예). – Seb

+0

흥미 롭; 인증서 저장소를 사용하고 있습니까? 아니면 암호화 된 것이 있습니까? –

답변

4

이 좋아 조금 어색 - 나는 모양을 했어 오류가 어딘가 .... 당신의 창 구성까지입니다.

예외를 던지고 코드의 부분은 특히, 실제로 advapi32.dll의에서 함수에 대한 상호 운용성 호출입니다 :

int status = Win32Native.SystemFunction040(this.m_buffer, (uint) (this.m_buffer.Length * 2), 0); 
if (status < 0) 
{ 
    throw new CryptographicException(Win32Native.LsaNtStatusToWinError(status)); 
} 
this.m_encrypted = true; 

전화 :

오류 코드를 반환 것
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), DllImport("advapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)] 
internal static extern int SystemFunction040([In, Out] SafeBSTRHandle pDataIn, [In] uint cbDataIn, [In] uint dwFlags); 

, 귀하의 예외를 초래합니다.

직장에 있으면 시스템 관리자/네트워크 담당자와 이야기하여 장애를 유발할 수있는 로컬 정책이 있는지 확인할 수 있습니다. 그렇지 않으면 바이러스 백신을 사용 중지하거나 타사 프록시 소프트웨어의 방화벽/실행 중지를 해제하면 어떻게되는지 알 수 있습니다.

기본적으로 기본 네트워크 기능을 무시합니다. 또한 모든 최신 Windows 업데이트가 있는지 확인하고 에 바이러스 또는 맬웨어 감염이 없음을 확인할 가치가 있습니다.

죄송합니다. 더 구체적인 것은 아니지만, 이것이 .Net/프로그래밍 오류라고 생각하지 않습니다.

+0

이상한 점은 VB에서 실행되는 .NET 3.5를 실행하는 독립 실행 형 프로그램이 있다는 것입니다. 우리가하려는 것은 독립 실행 형 프로그램을 웹 사이트에 통합하여 다른 사람들이 더 쉽게 이용할 수 있도록하는 것입니다. 내가 무언가에 대한 언급을 놓치지 않는다면 두 개의 비슷한 기능과 그것이 쓰여지는 방법이 같은 기계에서 어떻게 다른지 알 수 없다. – Seb

+1

플래그가 0 인 ahh 응답은 동일한 프로세스에서 지정된 메모리를 암호화하도록이 메소드에 지시합니다. VB가 작동 중이면 ASP.Net 웹 사이트와 동일한 자격 증명을 실행하지 않는 것일 수 있습니다. 확인할 사항은 ASP.Net 계정이 적절한 액세스 권한을 갖고 있으며 응용 프로그램 풀과 가상 디렉터리가 동일한 자격 증명을 실행하고 있다는 것입니다. 또한 가장 같은 것을 사용하고 있습니까? –

+0

자격 증명을 사용중인 다른 페이지를 요청하는 작업이 수행되지 않습니다. 위 코드에서 볼 수 있듯이 WebClient를 만들고 NetworkCredential 변수를 만듭니다. 그것은 그 이상으로 나아 가지 않습니다. NetworkCredential을 허용하도록 WebClient를 준비하거나 또는 그 반대로 할 수있는 일이 있습니까? – Seb

0

이 표준 PowerShell 콘솔에서 작동합니다 :

Add-Type -AssemblyName System.Net 
$client = New-Object System.Net.WebClient 
$netc = New-Object System.Net.NetworkCredential("Admin", "Nimda") 
$client.Credentials = $netc 

는이 같은 잘못된 핸들 오류가 발생하는지 흥미로운 일이 될 것이다.

편집 : 죄송합니다. 두 번째 줄에 오타가있었습니다.

5

나는이 동일한 문제에 부딪혔다. VS 2010의 ASP.NET Development Server에서 로컬로 일어났습니다. Windows 7/IIS 7에서 응용 프로그램을 실행했을 때 제대로 작동했습니다. 희망이 도움이!

+3

나를 위해 개발 서버를 중지하고 VS 2010에서 디버거 (개발 서버를 다시 시작 함)를 다시 시작한 다음 정상적으로 작동했습니다. – Finster