我在.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提供商相关?
无论如何,我创建了一个< membership> web.config中的部分并添加了< clear />。这解决了这个问题,但又造成了另一个问题,因为它现在再次使用连接字符串SqlRoleProvider
尝试访问machine.config中的LocalSqlServer
!我试图添加一个< roleManager> < clear />部分到我的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之前,我想问一下:
问题3:为什么标准应用程序在一段时间内正常运行,然后开始寻找SqlMembershipProvider和SqlRoleProvider?
是否有人在玩服务器上的设置?
答案 0 :(得分: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 中调用,该过滤器在帐户控制器上进行修饰。如果您需要自己添加对InitializeDatabaseConnection方法的调用,我只需将它放在Gloaba.asax Application_Start方法中。