6

我正在尝试使用 NetworkCredential 类通过 ASP.NET 访问网页。但是,我不断收到以下消息的异常System.Security.Cryptography.CryptographicException: The handle is invalid

下面是我如何尝试调用该函数的代码。任何帮助是极大的赞赏。

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
4

3 回答 3

5

我刚刚遇到了同样的问题。我在 VS 2010 的 ASP.NET 开发服务器下本地发生。当我在我的 Windows 7 / IIS 7 下执行该应用程序时,它工作得很好。希望这可以帮助!

于 2011-09-28T05:21:43.763 回答
4

好的,这有点尴尬-我看过了,错误归结为您的Windows配置....某处。

抛出异常的代码部分实际上是对 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);

这将返回一个错误代码,导致您的异常。

如果您在工作场所,您可能想与您的系统管理员/网络人员交谈,以查看您的本地策略中是否有任何可能导致失败的内容。否则,如果您禁用防病毒/禁用防火墙/关闭任何 3rd 方代理软件,我会看到会发生什么。

基本上,任何覆盖默认网络功能的东西。此外,可能值得检查您是否拥有所有最新的 Windows 更新,并且您没有任何病毒或恶意软件感染。

抱歉,我不能更具体,但我不相信这是一个 .Net/programming 错误。

于 2011-05-10T13:27:26.877 回答
0

这应该在标准的 powershell 控制台中工作:

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

看看这是否会产生相同的无效句柄错误将会很有趣。

编辑:抱歉,第二行有错字。

于 2011-05-10T14:08:53.270 回答