我已經編寫了使用SQL Server CE 4.0數據庫的ASP.NET 4.0應用程序。這一切都在我的開發環境中使用中等信任(與託管者相同的信任配置)。在這臺機器上,我已經完成了安裝過程(下載並安裝了MSI)。我現在正在嘗試將此解決方案部署到我的網絡託管服務商。我是否可以通過部署DLL在中等信任環境中使用SQL Server CE
運行的代碼(這是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: Cannot perform CAS Asserts in Security Transparent methods] 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: The type initializer for 'System.Data.SqlServerCe.KillBitHelper' threw an exception.]
System.Data.SqlServerCe.KillBitHelper.ThrowIfKillBitIsSet() +0
System.Data.SqlServerCe.SqlCeProviderFactory..cctor() +41[TypeInitializationException: The type initializer for 'System.Data.SqlServerCe.SqlCeProviderFactory' threw an exception.]
[TargetInvocationException: Exception has been thrown by the target of an invocation.]
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
Altairis.Web.Security.DatabaseExtensionMethods.CreateDbConnection(ConnectionStringSettings settings) in DatabaseExtensionMethods.cs:19
Altairis.Web.Security.TableMembershipProvider.ValidateUser(String username, String password) in TableMembershipProvider.cs:361
我已經使用反編譯器來查看通過co de,而且似乎SQL Server CE的內部正在尋找註冊表項,然後嘗試執行代碼Assert()
。
是否有可能在部分信任環境中使用SQL Server CE 4.0,部署DLL時只需\bin
?
我想你的博客文章說當安裝.NET 4.0時,添加了全局web.config文件中中對System.Data.SqlServerCe的引用?還是當SqlServerCe安裝? 我將不得不與我的主機檢查這個部分是否在全局web.config文件中... –
我剛剛看過DLL(右鍵單擊)和文件版本是4.0.8482.1 - 我在過去幾天只下載了這個版本。你在博客文章中提到4.0(不是4.1)。我使用錯誤的版本嗎? –
這不是文件版本,它是assmbly版本,看看你的Visual Studio項目中的Reference – ErikEJ