C# Membership.ValidateUser在升级到VS 2010/.NET 4.0后始终返回false

C# Membership.ValidateUser在升级到VS 2010/.NET 4.0后始终返回false,c#,asp.net,oracle,asp.net-membership,C#,Asp.net,Oracle,Asp.net Membership,不确定这是否与VS2010或升级的框架有关,但是。。。我们正在使用Oracle成员资格提供程序对用户进行身份验证。在升级之前,一切正常,但是现在Membership.ValidateUser(用户,密码)返回false,尽管凭据有效。没有抛出异常,因此很难确定问题可能是什么。VS2010中的网站管理工具仍然能够管理用户和角色(或多或少),因此我没有理由质疑连接性。可能是什么问题?您可能遇到了machineKey差异 在web.config中,隐式machineKey部分使用自动生成的加密和验证密

不确定这是否与VS2010或升级的框架有关,但是。。。我们正在使用Oracle成员资格提供程序对用户进行身份验证。在升级之前,一切正常,但是现在
Membership.ValidateUser(用户,密码)
返回
false
,尽管凭据有效。没有抛出异常,因此很难确定问题可能是什么。VS2010中的网站管理工具仍然能够管理用户和角色(或多或少),因此我没有理由质疑连接性。可能是什么问题?

您可能遇到了machineKey差异

在web.config中,隐式
machineKey
部分使用自动生成的加密和验证密钥,这些密钥再次根据应用程序Id设置密钥(
AutoGenerate,IsolateApps

您是使用不同的应用程序实例还是在另一台计算机上进行测试

Oracle成员资格提供程序是2.0还是4.0

这只是在黑暗中摸索,也许这会引导你找到解决办法

会员类型

ASP.NET成员资格中使用的某些类型(例如System.Web.Security.MembershipProvider)已从System.Web.dll移动到System.Web.ApplicationServices.dll程序集。移动这些类型是为了解决客户端和扩展.NET Framework SKU中类型之间的体系结构分层依赖关系

在ASP.NET 4项目中使用时,从早期版本的ASP.NET升级并使用已移动成员类型的类库可能无法编译。如果是,请在类库项目中将引用添加到System.Web.ApplicationServices.dll

答案(根据)是在Web.config中指定
hashAlgorithmType=“SHA1”

<membership defaultProvider="OracleMembershipProvider" hashAlgorithmType="SHA1"/>


这并没有解决现有用户的问题,但新创建的用户现在可以登录。

听起来有点像我遇到的问题

将machineKey元素添加到web.config而不是hashAlgorithmType=“SHA1”修复了该问题。。但我还是不明白为什么我要把它放在那里。。。也找不到任何文档

你可以在这里查看我的问题。。

我们的编译没有问题,Oracle成员资格提供程序2.0和4.0都出现了问题。我猜对于新创建的用户来说,添加
hashAlgorithmType
是一个麻烦。尝试在没有新用户的情况下添加和验证新用户。我怀疑问题与自动生成的机器钥匙有关。我正在写一些测试。将更新答案。新创建的用户可以在另一个(开发)框上进行身份验证,因此我认为hashAlgorithmType解决了这个问题。@nw-感谢您的回答,因为我遇到了同样的问题,而且我的头撞了几个小时的墙。在升级到.NET4.0时,似乎没有任何文档说明必须进行此更改。