.NET 4.0プロジェクトで、開発マシンでMSDTCが有効になっていないためにSystem.Web.Security.Roles.RoleExists
、内への呼び出しSystem.Transactions.TransactionScope
が失敗することがあります。ロールマネージャーのデータソースはLocalDBであり、プロバイダーのタイプはです。NuGetパッケージをインストールしました。これは、ロールマネージャーのプロバイダーを提供すると思います。System.Web.Providers.DefaultRoleProvider
Microsoft.AspNet.Providers.LocalDB
MSDTCが必要になる原因は何ですか?
コード
失敗した呼び出し:
using (var ts = new TransactionScope())
{
Roles.RoleExists("Administrator");
}
web.configの関連する構成セクション:
<connectionStrings>
<clear />
<add name="MembershipConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MyDB;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\mydb.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<remove name="AspNetSqlRoleProvider" />
<add connectionStringName="MembershipConnection" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</providers>
</roleManager>
テストプロジェクト
この問題を示すテストASP.NETMVC4インターネットアプリケーションを作成しました。TestBundles Visual Studio 2012ソリューションをダウンロードし、アプリをデバッグして、[ログイン]リンクをクリックします。アクションでロールの検証を試みたので、マシンでMSDTCを有効にしてLogin
いない限り、例外が発生するはずです。
public ActionResult Login(string returnUrl)
{
using (var ts = new TransactionScope())
{
Roles.RoleExists("Administrator");
}
ViewBag.ReturnUrl = returnUrl;
return View();
}