Сбой конструктора RSACryptoServiceProvider (RSACryptoServiceProvider) в .NET 3.5 для определенных имен ключей

Если вы посмотрите на код ниже, он ничего не делает, кроме создания нового экземпляраRSACryptoServiceProvider. The key container name is initialized from a property that creates a name based on various parameters. I have added hardcoded values in this demo code.

Код выполняется на установке сервера Windows 2008 R2 и работал в течение нескольких месяцев с постоянным значением, возвращаемым для имени контейнера ключа.

Несколько дней назад код перестал работать, и мы столкнулись с исключением ниже. Использование имени контейнера ключа, которое использовалось в течение нескольких месяцев, больше не работает. Сервер был перезагружен, IIS был перезапущен - безуспешно. Только после изменения названия ключа он снова начал работать.

Может кто-нибудь объяснить, почему это происходит и как это исправить? Насколько я вижу, этот код не создает постоянных объектов. Почему после перезагрузки все равно не получится? Из MSDN (http://msdn.microsoft.com/de-de/library/ca5htw4f.aspx) я прочитал, что конструктор & quot;constructor creates or reuses a key container specified using the KeyContainerName field& Quot ;. Есть ли & quot;reuse& Quot; значит, он где-то кеширует данные, и при этом он вылетает и теперь застрял в испорченной кешированной версии? Также обратите внимание, что одно и то же имя ключа в настоящее время все еще используется на многих других машинах - никаких проблем нигде нет.

This is the line that is crashing:

using ( RSACryptoServiceProvider rsa = new RSACryptoServiceProvider( this.oCspParameters ) )
{
}

These are the CspParameters used:

private readonly CspParameters oCspParameters = new CspParameters
{
  Flags = CspProviderFlags.UseMachineKeyStore,
};

this.oCspParameters.KeyContainerName = oProfile.KeyName;

And that's the key name:

public string KeyName
{
    get
    {
        return string.Format( "API-{0}-v{1}", "TestClient", "1.0.0.0" );
    }
}

And finally the exception:

CryptographicException: An internal error occurred.
Service Operation: ISessionService.Identify #f173250b-d7ac-45d5-98ed-7fffcf37d95a
at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)

Ответы на вопрос(2)

Ваш ответ на вопрос