0

最近、ローカルで使用していた SQL Server Express データベースを SQL Server 2012 Developer にアップグレードしました。このエラーが発生し始めました。クイック検索で大量の投稿が表示されますが、その答えはUser Instance=True;接続文字列から削除することであると思われます。

確認したところ、どの接続文字列にもこのフラグがありません。念のために「ユーザーインスタンス」のソリューション全体を検索してみましたが、どこにも表示されません。二重に奇妙なのは、このエラーがすぐに発生しないことです。データベースへの最初の数回の呼​​び出しは機能します...

他の誰かが同様の経験をしましたか?

エラーの原因となっている正確なコードは次のとおりです。

public class BetterAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
    {
        var roleList = Roles.Split(',');

        //if the user is in one of the roles in the list
        foreach (string r in roleList)
        {
            if (filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                //The error is consistently thrown here the second time this line
                //executes...
                if (filterContext.HttpContext.User.IsInRole(r.Trim()))
                {

関連すると思われる構成セクションは次のとおりです。

<connectionStrings>
  <add name="BioSphereContext" 
       providerName="System.Data.SqlClient" 
       connectionString="Server=fake;Database=fake;User ID=fake;Password=fake;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=true;" />
</connectionStrings>

.
.
.

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="15">
  <providers>
    <add name="DefaultSessionProvider" 
         type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
         connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</sessionState>


.
.
.

<entityFramework>
    <defaultConnectionFactory 
        type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
       <parameters>
          <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />
       </parameters>
    </defaultConnectionFactory>
</entityFramework>

それが役立つ場合に備えて、私のプロジェクトに関するいくつかの詳細...

  • VS 2012
  • エンティティ フレームワーク 5
  • Azure SDK 2.0
  • ASP.NET MVC 3
  • .net 4.5
4

2 に答える 2

1

このコードは、ASP.NET メンバーシップ ロール プロバイダーを使用します。

if (filterContext.HttpContext.User.IsInRole(r.Trim()))

machine.config が示しています

            <roleManager>
            <providers>
                <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
                <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </providers>
        </roleManager>

同じファイル内の「LocalSqlServer」を指す

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

ユーザーインスタンスがあります。

TODO: 別のロール プロバイダーを使用するように roleManager を構成するか、AspNetSqlRoleProvider を使用して別の接続文字列を使用するように構成します。

セッション (DefaultConnection とは何ですか? このような名前の接続文字列は表示されません)、メンバーシップ、およびプロファイルについても同様です。

だから試してください:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="15">
  <providers>
    <add name="DefaultSessionProvider" 
         type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
         connectionStringName="BioSphereContext" applicationName="/" />
  </providers>
</sessionState>
于 2013-06-23T17:48:26.343 に答える