【发布时间】:2012-02-15 15:31:23
【问题描述】:
我编写了一个使用 SQL Server CE 4.0 数据库的 ASP.NET 4.0 应用程序。这一切都在我的开发环境中使用中等信任(与主机相同的信任配置)。在这台机器上,我已经完成了安装过程(下载并安装了 MSI)。我现在正尝试将此解决方案部署到我的网络托管服务商。
正在运行的代码是(这是 Altairis Membership Provider 的直接副本:
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.Assert(CodeAccessPermission 上限、StackCrawlMark 和 stackMark)+61
System.Security.CodeAccessPermission.Assert() +28
System.Data.SqlServerCe.KillBitHelper.GetKillBit() +231
System.Data.SqlServerCe.KillBitHelper..cctor() +56[TypeInitializationException:'System.Data.SqlServerCe.KillBitHelper' 的类型初始化程序引发异常。]
System.Data.SqlServerCe.KillBitHelper.ThrowIfKillBitIsSet() +0
System.Data.SqlServerCe.SqlCeProviderFactory..cctor() +41[TypeInitializationException: 'System.Data.SqlServerCe.SqlCeProviderFactory' 的类型初始化器抛出异常。]
[TargetInvocationException:调用目标抛出异常。]
System.RuntimeFieldHandle.GetValue(RtFieldInfo 字段, 对象实例, RuntimeType fieldType, RuntimeType declaringType, Boolean& 域初始化)+0
System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency) +180
System.Reflection.RtFieldInfo.GetValue(Object obj) +8
System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) +232
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +88
Altairis.Web.Security.DatabaseExtensionMethods.CreateDbConnection(ConnectionStringSettings 设置)在 DatabaseExtensionMethods.cs:19
Altairis.Web.Security.TableMembershipProvider.ValidateUser(字符串 用户名,字符串密码)在 TableMembershipProvider.cs:361
我使用反编译器查看代码,似乎 SQL Server CE 的内部正在寻找注册表项,然后尝试执行代码Assert()。
是否可以在部分信任环境中使用 SQL Server CE 4.0,只需 \bin 部署 DLL??
【问题讨论】:
标签: asp.net sql-server-ce partial-trust