2012-01-21 23 views
0

我已經編寫了使用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.. } 
} 

在上面的實例中,dbDbConnectioncmdDbCommand

我得到以下錯誤:

[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

回答

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

+0

我想你的博客文章說當安裝.NET 4.0時,添加了全局web.config文件中中對System.Data.SqlServerCe的引用?還是當SqlServerCe安裝? 我將不得不與我的主機檢查這個部分是否在全局web.config文件中... –

+0

我剛剛看過DLL(右鍵單擊)和文件版本是4.0.8482.1 - 我在過去幾天只下載了這個版本。你在博客文章中提到4.0(不是4.1)。我使用錯誤的版本嗎? –

+0

這不是文件版本,它是assmbly版本,看看你的Visual Studio項目中的Reference – ErikEJ

相關問題