2012-01-21 11 views
0

SQL Server CE 4.0データベースを使用しているASP.NET 4.0アプリケーションを作成しました。これはすべて私の開発環境でMedium Trust(hosterと同じ信頼設定)を使用して動作しています。このマシンでは、インストールプロセスを完了しました(MSIをダウンロードしてインストールしました)。私は今、このソリューションを私のweb hosterに導入しようとしています。DLLをデプロイするだけで中程度の信頼環境でSQL Server CEを使用できますか

実行されているコードがある

(これはAltairisメンバーシッププロバイダーのまっすぐコピーです:dbDbConnectionで、上記の例では

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.. } 
} 

、および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

私は、デコンパイラを使用して、 deと、SQL Server CEの内部がレジストリエントリを探していて、コードAssert()を実行しようとしているようです。

部分的な信頼環境では、\bin DLLを展開するだけでSQL Server CE 4.0を使用できますか?

答えて

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

関連する問題