1

MVC3 (MVC4 も試しました) を共有ホスト (MVC3 がインストールされている) に公開しようとしていますが、次のセキュリティ例外が発生しています。

セキュリティ例外

説明: アプリケーションは、セキュリティ ポリシーで許可されていない操作を実行しようとしました。このアプリケーションに必要な権限を付与するには、システム管理者に連絡するか、構成ファイルでアプリケーションの信頼レベルを変更してください。

Exception Details: System.Security.SecurityException: Request failed.

ソース エラー:

Line 20: @foreach (var item in Model) {

エラーの最初の数行は次のとおりです。

System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessSecurityEngine.Check(PermissionSet permSet, StackCrawlMark& stackMark) +31
   System.Security.PermissionSet.Demand() +68
   System.Data.LocalDBAPI.**DemandLocalDBPermissions**() +241
   System.Data.LocalDBAPI.CreateLocalDBInstance(String instance) +32
   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5306971
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +145
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +262
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +307
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) +434
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +225

共有ホストは信頼レベル = 中で実行されています。そのため、私のローカル マシンのプロジェクトでは、Web 構成でトラストを中レベルに設定しましたが、問題なく動作します。

<trust level="Medium" originUrl="" />

データベースをサーバーにアップロードしたので、サーバー上でデータベースを再構築するために EF を再利用していません。

しかし、エラーを見ると、LocalDbConnectionFactoryが原因ではないでしょうか? それとも、展開後もそのままにしておくべきですか? 私の web.config の一部:

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=liveServer,com;Initial Catalog=sarmie;Persist Security Info=True;User ID=liveServer;Password=liveServer;" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
    <parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>

ここに私のコンテキストクラスがあります:

public class MvcApplication4Context : DbContext
    {
        //public MvcApplication4Context()
        //{
        //    System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MvcApplication4.Models.MvcApplication4Context>());
        //}

        public DbSet<MvcApplication2.Models.Ad> Ads { get; set; }
    }

何か不足していますか?共有ホストは、LocalDB を機能させるために何かをインストールする必要がありますか? または、これをバイパスして LINQ クエリを機能させる方法はありますか?

助けてください

よろしくデビッド

4

2 に答える 2

1

わかりました、これは私に理解するのに少しかかりました。ステップ1、LOCALDBまたはLocalDbConnectionFactoryを使用しないでください。共有ホストでサポートされているとは思いません。ここで説明されているように、SQLCE4.0を使用してください

nugetを介してEntityFramework.SqlServerCompactをインストールします

これをweb.configに含めることを忘れないでください(まだ追加されていない場合)。MvcApplication8.Models.MvcApplication8Contextがコンテキストクラスになります:

<connectionStrings>
  <add name="MvcApplication8.Models.MvcApplication8Context" connectionString="Data Source=|DataDirectory|mvc8Context.sdf" providerName="System.Data.SqlServerCe.4.0" />
  <add name="DefaultConnection" connectionString="Data Source=****;Initial Catalog=testing;Persist Security Info=True;User ID=****;Password=****;" providerName="System.Data.SqlClient" />
</connectionStrings>

<entityFramework>
 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="System.Data.SqlServerCe.4.0" />
  </parameters>
 </defaultConnectionFactory>
</entityFramework>
<system.data>
<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.4.0" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>

上記のリンクで述べたように、次のDLLを「copylocal」=trueに設定することを忘れないでください。Entityframework SqlserverCE SqlserverCE.Entity

次に、DBをローカルPCから共有ホストにコピー/エクスポートする必要があります。

補足として:オートマッパーを使用しないでください。私はこれを中程度の信頼で機能させるためにあらゆることを試みましたが、これは不可能だと思います。エラーが発生します:

System.Security.SecurityException:タイプ'System.Security.Permissions.ReflectionPermission、mscorlib、Version = 4.0.0.0、Culture = neutral、PublicKeyToken=b77a5c561934e089'のアクセス許可の要求が失敗しました。私は現在valueinjecterを使用していますが、完全に機能します。

そして今、ついに機能しています。

于 2013-02-07T10:38:27.457 に答える