Система RSACryptoServiceProvider CryptographicException не может найти файл указанным в соответствии с ASP.NET

, Каким образом?

, поскольку это - то, что говорят все книги. Как шаблоны GoF, многие люди видят его как универсально хороший и никогда не думают о том, является ли это действительно правильным дизайном.

, Как Вы знаете все отношения между объектами, которые произойдут в том интерфейсе?

Вы не делаете, и это - проблема.

, Если Вы уже знаете те отношения, тогда почему не только расширяют абстрактный класс?

Причины не расширить абстрактный класс:

  1. у Вас есть радикально различные реализации, и создание достойного базового класса слишком трудно.
  2. необходимо записать и только базовый класс для чего-то еще.

, Если ни один не применяется, идите вперед и используйте абстрактный класс. Это сохранит Вас много времени.

Вопросы Вы не спросили:

, Что оборотные стороны использования являются интерфейсом?

Вы не можете изменить их. В отличие от абстрактного класса, интерфейс установлен в камне. Как только у Вас есть одно используемое, расширение его повредит код, период.

мне действительно нужно также?

Большую часть времени, нет. Думайте действительно трудно перед созданием любой иерархии объектов. Большая проблема на языках как Java состоит в том, что он делает слишком легким создать крупные иерархии сложного объекта.

Рассматривают классический пример, который LameDuck наследовал от Утки. Звучит легким, не так ли?

ну, который является, пока Вы не должны указывать, что утка была ранена и является теперь Ламе. Или укажите, что неудачник был излечен и может идти снова. Java не позволяет Вам изменять тип объектов, таким образом с помощью подтипов, чтобы указать, что хромота на самом деле не работает.

15
задан Grace Note 27 May 2010 в 20:54
поделиться

4 ответа

Действительно, вам нужно работать с таким кодом

CspParameters _cpsParameter;
RSACryptoServiceProvider RSAProvider;

_cpsParameter = new CspParameters();
_cpsParameter.Flags = CspProviderFlags.UseMachineKeyStore;

RSAProvider = new RSACryptoServiceProvider(1024, _cpsParameter); 

Следующим пользователям нужен доступ к папке: C: \ Documents and Settings \ All Users \ Application data \ Microsoft \ Crypto \ RSA \ MachineKeys

  1. Учетная запись пользователя IIS (анонимная)
  2. Учетная запись пользователя, которую вы используете для олицетворения своего приложения в настройках web.config.

Итак, теперь у меня все работает нормально.

10
ответ дан 1 December 2019 в 00:18
поделиться

Попробуйте установить

System.Security.Cryptography.RSACryptoServiceProvider.UseMachineKeyStore = true;

РЕДАКТИРОВАТЬ: Затем попробуйте использовать

var provider = new System.Security.Cryptography.RSACryptoServiceProvider();

вместо конструктора с целочисленным параметром. Этот конструктор пытается сгенерировать ключ с указанной длиной ключа, и вы, возможно, не сможете сделать это с вашими разрешениями.

8
ответ дан 1 December 2019 в 00:18
поделиться

Я исправил это, установив для параметра "Загрузить профиль пользователя" значение "Истина" (было неверно) в разделе Advanced Settings / Process Model пула приложений.

Приложение отлично работало на Server 2003 R2 / IIS 6, и проблема появилась, когда я настраивал его на нашем новом сервере 2008 R2.

Есть идея попробовать это на:

http://social.msdn.microsoft.com/forums/en-US/clr/thread/7ea48fd0-8d6b-43ed-b272-1a0249ae490f/

YMMV

32
ответ дан 1 December 2019 в 00:18
поделиться

Я просто хотел прокомментировать, что решение Расмуса Фабера сработало для меня (с одним незначительным изменением):

System.Cryptography.RSACryptoServiceProvider.UseMachineKeyStore = true;
RSACryptoServiceProvider provider = new System.Cryptography.RSACryptoServiceProvider();

Я пытался заставить MailBee.net подписывать исходящее сообщение с помощью DKIM и получил то же сообщение, что и ОП. Конечно, на моей машине разработчика все было хорошо, но при загрузке на клиентский веб-хост я столкнулся с этой проблемой. Как я уже сказал, приведенное выше решение сработало для меня, в то время как другие, которые я нашел в Интернете (включая ссылку на форум msdn выше), нет.

(Я бы проголосовал за и прокомментировал, но у меня недостаточно репутации для этого.: P)

Спасибо, Расмус Фабер!

1
ответ дан 1 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: