2013-02-13 71 views
0

我有一个简单的CLI应用程序来创建/更新/删除SqlMembershipProvider的用户。它的工作原理,我可以验证从CLI应用程序罚款Membership.ValidateUser在一个项目中工作失败其他

但是,一旦我尝试从相关的asp.net应用程序执行它,它就会失败。我真的复制/粘贴相关的web.conf/app.config部分,所以我不知道为什么它失败。

<machineKey validationKey="C94FA3782AAF21E932CAA92DC2A0641951E3A76E50DD25B19C627BA01E259C6CBC7839A7803A59EF3BF855152369A6AB10CC259513BE7ACA4E842B962FD1D8A4" 
       decryptionKey="2EA6D270AD94361ECFDCED5070D76FD67D9A147FEEBC8388FE9B73B450A04560" 
       validation="SHA1" 
       decryption="AES" /> 

    <membership defaultProvider="MembershipProvider"> 
     <providers> 
     <add name="MembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
      connectionStringName="ApplicationServices" 
      enablePasswordRetrieval="false" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      requiresUniqueEmail="false" 
      maxInvalidPasswordAttempts="5" 
      minRequiredPasswordLength="1" 
      minRequiredNonalphanumericCharacters="0" 
      passwordAttemptWindow="10" 
      passwordStrengthRegularExpression=""/> 
     </providers> 
    </membership> 

这是在web.config和app.config,有人可以解释为什么这将验证在CLI项目,而不是asp.net项目?

而且要清楚,这里是不是validationg

Membership.ValidateUser("fake", "fake") // actual test un/pwd combo 

我验证过联合国/密码,其实是正确的代码。

+0

我可能会在这里丢失一些明显的东西,但是当它在Web应用程序中“失败”时会发生什么?你是否收到特定的错误信息? – jadarnel27 2013-02-13 05:36:32

回答

1

不知道其他任何关于您的应用程序,似乎最可能的问题是配置文件中membership/providers/add节点中的applicationName属性。请参阅http://msdn.microsoft.com/en-us/library/system.web.security.membership.applicationname.aspx

这些应用程序可能默认为单独的应用程序名称/标识符。因此,当您尝试通过Web应用程序登录时,提供程序只能看到授予CLI应用程序的访问权限。 CLI应用程序可能无法访问Web根目录或虚拟路径信息(没有http上下文)来创建默认名称,因此它可能默认为与Web应用程序applicationName不同的内容。

看看这个链接,一个很好的解释:http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx

您可以通过两种方式处理这个问题:

  • 尝试的applicationName设置在两个结构相同的字符串。

OR

  • 确保有在aspnet_Membership表用户 “假” 两个条目。一个用于CLI应用程序,一个用于Web应用程序。您应该找到aspnet_Application表中列出的每个应用程序的applicationID。

这是另一个参考,有人在asp.net应用程序之外使用了SqlMembershipProvider:http://mdrasel.wordpress.com/2011/02/01/asp-net-membership-provider-outside-of-web-application/。请注意使用applicationName属性。

+0

是的,我发布后,我意识到我没有设置应用程序名称。愚蠢的错误。 – Fred 2013-02-14 11:16:52

相关问题