6

NetworkCredential クラスを使用して、ASP.NET 経由で Web ページにアクセスしようとしています。ただし、次のメッセージで例外が発生し続けます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);

エラーコードが返され、例外が発生します。

職場にいる場合は、システム管理者/ネットワークの担当者と話し、ローカル ポリシーに障害の原因となる可能性のあるものがあるかどうかを確認することをお勧めします。それ以外の場合は、ウイルス対策を無効にする/ファイアウォールを無効にする/サードパーティのプロキシソフトウェアを無効にするとどうなるかを確認します.

基本的に、デフォルトのネットワーク機能をオーバーライドするもの。また、最新の Windows アップデートがすべて適用されていること、およびウイルスやマルウェアに感染ていないことを確認する価値があるかもしれません。

詳しくは言えませんが、.Net/プログラミング エラーではないと思います。

于 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

これが同じ無効なハンドル エラーを生成するかどうかを確認することは興味深いでしょう。

追記:すみません、2行目に誤字がありました。

于 2011-05-10T14:08:53.270 に答える