0

我在 .NET Framework 4 项目中使用了标准的 VS 2012 MVC 4 Internet 模板。我主要使用外部登录(Google、Microsoft、Facebook、Yahoo、Twitter)来访问我的应用程序中装饰有 [Authorize] 属性的部分。

[我注意到的一件事是 VS 创建的默认 web.config 不包含任何有关成员资格或角色提供程序的部分,这与我在 ASP.NET Web 表单应用程序中看到的不同。]

我将该项目部署到 azurewebsites.net 站点。最初一切正常,但经过一些使用后,该应用程序将抛出异​​常,因为它尝试使用服务器的机器配置文件SqlMembershipProvider使用名为LocalSqlServer.

Q1:SqlMembershipProvider 与 SimpleMembership 提供者有何关系?

无论如何,我在 web.config 中创建了一个 <membership> 部分并添加了 <clear/>。这解决了这个问题,但又产生了另一个问题,因为现在它再次尝试SqlRoleProvider使用连接字符串在 machine.config中访问LocalSqlServer!我尝试将带有 <clear/> 的 <roleManager> 部分添加到我的 web.config 中,但没有那么成功。它坚持要包含一个 defaultProvider。我应该放什么?

Q2。.NET Framework 4.0 MVC 4 应用程序中用于 SimpleMembership 角色提供程序的程序集是什么?

我试过了:

System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

但它产生了另一个问题,即它Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'。在我运行 aspnet_regsql.exe 之前,我想问一下:

Q3:为什么标准app运行一段时间后就开始找SqlMembershipProvider和SqlRoleProvider了?

有人在玩服务器上的设置吗?

4

1 回答 1

2

这是使用 SimpleMembership 时您的 web.config 设置的外观。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership>

包含 SimpleMembership 角色提供程序的程序集是 WebMatrix.WebData。

SqlMembershipProvider 与 SimpleMembership 无关,只是它们都是成员资格提供者。我的猜测是,如果 SimpleMembership 配置不正确,它默认为 SqlMembershipProvider。

在您的应用程序中的某处,您需要通过调用WebSecurity.InitializeDatabaseConnection为 SimpleMembership 初始化数据库。此方法中的第一个参数指示要使用的连接字符串。如果应用程序是使用 MVC4 Internet 模板创建的,则在过滤器InitializeSimpleMembershipAttribute中调用此方法,该过滤器在 Account Controller 上进行装饰。如果您需要自己添加对 InitializeDatabaseConnection 方法的调用,我会将其放入 Gloaba.asax Application_Start 方法中。

于 2013-10-14T12:45:17.440 回答