Я написал приложение ASP.NET 4.0, которое использует базу данных SQL Server CE 4.0.Все это работает в моей среде разработки с использованием Medium Trust (такой же конфигурации доверия, как у хостера).На этой машине я прошел процесс установки (скачал и установил MSI).Сейчас я пытаюсь развернуть это решение на своем веб-хостере.
Код, который выполняется: (Это прямая копия поставщика членства Altairis:
using (HostingEnvironment.Impersonate())
using (var db = this.connectionString.CreateDbConnection())
using (var cmd = this.CreateDbCommand("SELECT PasswordHash, PasswordSalt FROM $Users WHERE UserName = @UserName AND IsApproved = 1", db))
{
cmd.AddParameterWithValue("@UserName", username);
db.Open();
// Validate password
using (var r = cmd.ExecuteReader()) { .. snip.. }
}
ВНапример, db
равно DbConnection
, а cmd
равно DbCommand
Я получаю следующую ошибку:
[InvalidOperationException: невозможно выполнить утверждения CAS вПрозрачные методы безопасности] System.Security.CodeAccessSecurityEngine.CheckNReturnSO (PermissionToken permToken, требование CodeAccessPermission, StackCrawlMark & stackMark, Int32 создать) + 0
System.Security.CodeAccessSecurityEngine *arkark * * *arkark * Stack 61 * StackMackSakeSec.Security.CodeAccessPermission.Assert () + 28
System.Data.SqlServerCe.KillBitHelper.GetKillBit () + 231
System.Data.SqlServerCe.KillBitHelper..cctor () + 56
[Тип инициализации: Инициализатор типа для 'System.Data.SqlServerCe.KillBitHelper' вызвал исключение.]
System.Data.SqlServerCe.KillBitHelper.ThrowIfKillBitIsSet () + 0
System.Data.SqlServerCe.SqlSeProviderFactory..cctor () +41
[TypeInitializationException: инициализатор типа для исключений 'System.Data.SqlServerCe.rewserFeC.]
[TargetInvocationException: исключение было сгенерировано целью вызова.]
System.RuntimeFieldHandle.GetValue (RtFieldInfo, экземпляр объекта, RuntimeType fieldType, RuntimeType declaringType, Boolean & 0Init 0 0) 0 домен* System.Reflection.RtFieldInfo.InternalGetValue (Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency) + 180
System.Reflection.RtFieldInfo.GetValue (Object obj) + 8
System.Data.Common.DbetFFFFFFproviderRow) + 232
System.Data.Common.DbProviderFactories.GetFactory (String providerInvariantName) + 88
Altairis.Web.Security.DatabaseExtensionMethods.CreateDbConnection (параметры ConnectionStringSettings) в DatabaseExtensionMethods * 19: 1033: 1033airis.Web.Security.TableMembershipProvider.ValidateUser (String username, String password) в TableMembershipProvider.cs: 361
Я использовал декомпилятор для просмотра кода, и кажется, что внутренние компонентыSQL Server CE ищет запись в реестре, а затем пытается сделать код Assert()
.
Можно ли использовать SQL Server CE 4.0 в среде с частичным доверием, просто \bin
развертывая DLL?