0

我编写了一个使用 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.. }
 }

在上面的例子中,dbDbConnection,并且cmdDbCommand

我收到以下错误:

[InvalidOperationException:无法在安全透明方法中执行 CAS 断言] System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32 create) +0
System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, 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 field, Object instance, RuntimeType fieldType, RuntimeType declaringType, Boolean& domainInitialized) +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
DatabaseExtensionMethods.cs:19 中的 Altairis.Web.Security.DatabaseExtensionMethods.CreateDbConnection(ConnectionStringSettings 设置)
TableMembershipProvider.cs:361 中的 Altairis.Web.Security.TableMembershipProvider.ValidateUser(字符串用户名,字符串密码)

我使用反编译器查看代码,似乎 SQL Server CE 的内部正在寻找注册表项,然后尝试执行代码Assert()

是否可以通过仅\bin部署 DLL 在部分信任环境中使用 SQL Server CE 4.0?

4

1 回答 1

1

是的,只要您的主机允许 - 在 ASP.NET 4.0 中默认允许。确保您使用程序集版本 4.0.0.0(而不是 4.0.0.1)。在这里阅读更多:http: //erikej.blogspot.com/2011/10/sql-server-compact-40-under-aspnet.html

于 2012-01-21T10:12:38.257 回答